Use Enum.GetValues a recuperar una matriz de todos los valores. Luego seleccione un elemento de matriz aleatorio.
static T RandomEnumValue<T>()
{
var v = Enum.GetValues (typeof (T));
return (T) v.GetValue (new Random().Next(v.Length));
}
prueba:
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
Actualizado: Esta respuesta utilizado originalmente OrderBy (x => _Random.Next()).FirstOrDefault()
para seleccionar un elemento aleatorio. Úselo solo si se siente irracionalmente atraído por las teclas aleatorias. En cualquier otro caso, utilice la respuesta aceptada por Darin Dimitrov en su lugar, que incorporé en esta respuesta más adelante.
Asegúrese de que usted no mantiene recreando 'random' en un bucle estrecho, aunque - lo contrario va a seguir recibiendo el mismo valor. – ChrisF
¿Debería ser aleatorio.Siguiente (values.Length -1)? – uriDium
@uriDium No, el argumento especifica qué valor es el primero en ser demasiado grande para ser devuelto (es decir_max menos 1_) – mafu