有帮助吗?

解决方案

Developer Fusion VB.Net到C#转换器说等效的C#代码是:

System.Random rnd = new System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

为了将来参考,他们还有一个 C#转VB.Net转换器。此外还有其他几种工具

其他提示

我最初认为这是一个坏主意,因为排序算法需要对数字进行多次比较,并且每次调用该数字的lambda时,它将获得相同数字的不同排序键。但是,它看起来只对列表中的每个元素调用一次,并存储该值以供以后使用。此代码演示了这一点:

int timesCalled = 0;
Random rnd = new Random();

List<int> numbers = Enumerable.Range(1, 100).OrderBy(r =>
   {
       timesCalled++;
       return rnd.Next();
   }
).ToList();

Assert.AreEqual(timesCalled, 100);
Random rnd = new Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

更容易的事情......

Enumerable.Range(1, 100).OrderBy(c=> Guid.NewGuid().ToString())

如果没有访问Visual Studio(手指交叉),我可以做到最好:

System.Random rnd = New System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(rnd => rnd.Next);

使用 C5通用收藏库,您可以使用内置 Shuffle ()方法:

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100));
numbers.Shuffle();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top