Verwenden Enum.GetValues zu Ein Array aller Werte abrufen. Wählen Sie dann ein zufälliges Array-Objekt.
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
Aktualisiert: Diese Antwort verwendet ursprünglich OrderBy (x => _Random.Next()).FirstOrDefault()
ein zufälliges Element auszuwählen. Verwenden Sie es nur, wenn Sie irrational von zufälligen Schlüsseln angezogen werden. In jedem anderen Fall verwende stattdessen die angenommene Antwort von Darin Dimitrov, die ich später in diese Antwort aufgenommen habe.
Achten Sie darauf, nicht halten 'random' in einer engen Schleife neu zu erstellen, obwohl - sonst werden Sie behalten den gleichen Wert zu bekommen. – ChrisF
Sollte das random.Next (values.Length -1) sein? – uriDium
@uriDium Nein, das Argument gibt an, welcher Wert die erste zu groß sein, werden zurückgeführt (d.h._max minus 1_) – mafu