Используйте Enum.GetValues, чтобы получить массив всех значений. Затем выберите случайный элемент массива.
static T RandomEnumValue<T> ()
{
var v = Enum.GetValues (typeof (T));
return (T) v.GetValue (new Random ().Next(v.Length));
}
Тест:
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
Обновлено: в этом ответе изначально использовался OrderBy (x => _Random.Next()).FirstOrDefault ()
для выбора случайного элемента. Используйте его только в том случае, если вас беспорядочно тасуют случайные ключи. В любом другом случае используйте вместо принятого ответа Дарина Димитрова, который я включил в этот ответ позже.