Utilisez Enum.GetValues à récupérer un tableau de toutes les valeurs. Ensuite, sélectionnez un élément de tableau aléatoire.
static T RandomEnumValue<T>()
{
var v = Enum.GetValues (typeof (T));
return (T) v.GetValue (new Random().Next(v.Length));
}
Test:
for (int i = 0; i < 10; i++) {
var value = RandomEnumValue<System.DayOfWeek>();
Console.WriteLine (value.ToString());
}
->
Tuesday
Saturday
Wednesday
Monday
Friday
Saturday
Saturday
Saturday
Friday
Wednesday
Mise à jour: Cette réponse utilisée à l'origine OrderBy (x => _Random.Next()).FirstOrDefault()
pour sélectionner un élément aléatoire. Ne l'utilisez que si vous êtes irrationnellement attiré par des touches aléatoires. Dans tous les autres cas, utilisez plutôt la réponse acceptée par Darin Dimitrov, que j'ai incorporée dans cette réponse plus tard.
Assurez-vous que vous ne gardez pas recréer 'random' dans une boucle serrée bien - sinon vous allez continuer à obtenir la même valeur. – ChrisF
Devrait-elle être aléatoire.Next (values.Length -1)? – uriDium
@uriDium Non, l'argument spécifie quelle valeur est la première à être trop grande pour être renvoyée (c.-à-d._max minus 1_) – mafu