Учитывая произвольное перечисление в C#, как я выбираю случайное значение?
(Я не нашел этот очень простой вопрос на ТАК. Я отправлю свой ответ через минуту как ссылка для любого, но не стесняйтесь отправлять свой собственный ответ.)
Array values = Enum.GetValues(typeof(Bar));
Random random = new Random();
Bar randomBar = (Bar)values.GetValue(random.Next(values.Length));
Используйте 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 ()
для выбора случайного элемента. Используйте его только в том случае, если вас иррационально привлекает тасование случайных ключей. В любом другом случае вместо этого используйте принятый ответ Дарина Димитрова, который я включил в этот ответ позже.
Вызов Enum.GetValues
; это возвращает массив, который представляет все возможные значения для вашего перечисления. Выберите случайный элемент из этого массива. Верните этот элемент к исходному типу перечисления.