.NET 3.5 kullanıyorsanız, aşağıdaki IEnumerable serinliğini kullanabilirsiniz (VB.NET, C # değil, ancak fikir açık olmalıdır ...):
Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();
Düzenleme: Tamam ve burada karşılık gelen VB.NET kodu:
Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next()).ToArray()
İkinci düzenleme, zamana dayalı bir sıralamanın döndürülmesi nedeniyle System.Random "iş parçacığı güvenli değil" ve "yalnızca oyuncak uygulamaları için uygun değildir" ifadelerine yanıt olarak: Örneğimde kullanıldığı gibi, Random () mükemmel iş parçacığı için güvenli değilse, diziyi yeniden rastgele girdiğiniz rutinin yeniden girilmesine izin veriyorsunuz, bu durumda lock (MyRandomArray)
verilerinizi bozmamak için yine de böyle bir şeye ihtiyacınız olacak ve bu da koruyacaktır rnd
.
Ayrıca, entropi kaynağı olarak System.Random'un çok güçlü olmadığı iyi anlaşılmalıdır. MSDN belgelerinde belirtildiği gibi, System.Security.Cryptography.RandomNumberGenerator
güvenlikle ilgili bir şey yapıyorsanız, türetilmiş bir şey kullanmalısınız . Örneğin:
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]);
}