List上的OrderBy()未编译



我有一个字符列表,我想从中生成一个随机字符串。

var chars = new List<char>("abcdwhatever".ToCharArray());
var result = chars.OrderBy(new Guid()).Take(5).ToString();

如上所述,我想要得到随机字符串。

问题是它返回一个错误:

无法根据用法推断方法Enumerable.OrderBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>)的类型参数。请尝试显式指定类型参数。

这真的很奇怪,因为这不是我第一次尝试订购列表,但这次它拒绝工作。

您想要的是:

var rnd = new Random();
var result = chars.OrderBy(c => rnd.Next()).Take(5);

Guid不能保证是随机的,只能是唯一的。您应该使用适当的随机数生成器。

也许性能在这里无关紧要,我不知道。但如果它确实这样做了,并且假定的chars是一个IList<char>它会运行稍微快一点使用一个普通的香草的循环

var r = new Random(DateTime.Now.Millisecond);
var randChars = new char[5];
for (var i = 0; i < 5; i++)
randChars[i] = chars[r.Next(0, chars.Length)];

最新更新