如果您使用的是.NET 3.5,则可以使用以下IEnumerable凉爽性(VB.NET,而不是C#,但思路应该很清楚…):
Random rnd=new Random();string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();
编辑:确定,这是相应的VB.NET代码:
Dim rnd As New System.RandomDim MyRandomArray = MyArray.OrderBy(Function() rnd.Next()).ToArray()
第二次编辑,以回应由于返回基于时间的序列而导致System.Random“不是线程安全的”并且“仅适用于玩具应用程序”:如在我的示例中所使用的,Random()完全是线程安全的,除非您允许重新输入随机数组的例程,在这种情况下,无论如何您都需要类似的东西
lock(MyRandomArray)以免破坏您的数据,这也将提供保护
rnd。
同样,应该很好地理解System.Random作为熵的来源不是很强大。如MSDN文档中所述,
System.Security.Cryptography.RandomNumberGenerator如果您要进行与安全性相关的任何操作,则应使用从中获取的内容。例如:
using System.Security.Cryptography;
…
RNGCryptoServiceProvider rnd = new RNGCryptoServiceProvider();string[] MyRandomArray = MyArray.OrderBy(x => GetNextInt32(rnd)).ToArray();
…
static int GetNextInt32(RNGCryptoServiceProvider rnd) { byte[] randomInt = new byte[4]; rnd.GetBytes(randomInt); return Convert.ToInt32(randomInt[0]); }


