Si vous êtes sur .NET 3.5, vous pouvez utiliser l'interface IEnumerable fraîcheur (VB.NET, pas du C#, mais l'idée doit être clair...):
Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next)
Edit: OK et voici le code C# correspondant:
Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();
Seconde édition, en réponse à des remarques de ce Système.Au hasard "n'est pas thread-safe" et "ne convient que pour jouet apps" en raison de retour d'un temps-en fonction de la séquence: comme utilisé dans mon exemple, Random() est parfaitement thread-safe, sauf si vous êtes en permettant la routine dans laquelle vous rendre aléatoire le tableau de saisir de nouveau, dans ce cas, vous aurez besoin de quelque chose comme lock (MyRandomArray)
de toute façon, afin de ne pas corrompre vos données, ce qui permettra de protéger rnd
.
Aussi, il convient de bien comprendre ce Système.Aléatoire comme source d'entropie n'est pas très forte. Comme indiqué dans la documentation MSDN, vous devriez utiliser quelque chose dérivée d' System.Security.Cryptography.RandomNumberGenerator
si vous faites quoi que ce soit lié à la sécurité. Par exemple:
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]);
}