如果您使用的是.NET3.5,则可以使用以下IEnumerable Coolness:
Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();
编辑:下面是相应的VB.网络代码:
Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next()).ToArray()
第二次编辑,回应该系统的 comments .由于返回基于时间的序列,Random"不是线程安全的"和"仅适用于玩具应用程序":在我的示例中,Random()是完全线程安全的,除非您允许重新输入随机数组的 routine ,在这种情况下,您无论如何都需要大约lock (MyRandomArray)
个,以避免损坏数据,这也将保护rnd
.
此外,应该充分理解该系统.随机性作为熵的来源不是很强.正如MSDN documentation中所指出的,如果你在做任何与安全相关的事情,你应该使用从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]);
}