Utilizzare Enum.GetValues a recuperare una matrice di tutti i valori. Quindi seleziona un elemento dell'array casuale.
static T RandomEnumValue<T>()
{
var v = Enum.GetValues (typeof (T));
return (T) v.GetValue (new Random().Next(v.Length));
}
prova:
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
Aggiornamento: Questa risposta originariamente utilizzato OrderBy (x => _Random.Next()).FirstOrDefault()
per selezionare un elemento casuale. Usalo solo se sei irrazionalmente attratto dal mischiare con chiavi casuali. In ogni altro caso, usa invece la risposta accettata da Darin Dimitrov, che ho incorporato in questa risposta più tardi.
Assicurarsi di non tenere ricreare 'random' in un loop stretto anche se - altrimenti ti continuo a ricevere lo stesso valore. – ChrisF
Deve essere casuale. Successivo (valori.Lunghezza -1)? – uriDium
@uriDium No, l'argomento specifica quale valore è il primo a essere troppo grande per essere restituito (ad es._max meno 1_) – mafu