Как я выбираю случайное значение из перечисления?

Учитывая произвольное перечисление в C#, как я выбираю случайное значение?

(Я не нашел этот очень простой вопрос на ТАК. Я отправлю свой ответ через минуту как ссылка для любого, но не стесняйтесь отправлять свой собственный ответ.)

160
задан mafu 28 June 2010 в 11:59
поделиться

3 ответа

Array values = Enum.GetValues(typeof(Bar));
Random random = new Random();
Bar randomBar = (Bar)values.GetValue(random.Next(values.Length));
266
ответ дан 23 November 2019 в 21:30
поделиться

Используйте 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 () для выбора случайного элемента. Используйте его только в том случае, если вас иррационально привлекает тасование случайных ключей. В любом другом случае вместо этого используйте принятый ответ Дарина Димитрова, который я включил в этот ответ позже.

56
ответ дан 23 November 2019 в 21:30
поделиться

Вызов Enum.GetValues ​​; это возвращает массив, который представляет все возможные значения для вашего перечисления. Выберите случайный элемент из этого массива. Верните этот элемент к исходному типу перечисления.

2
ответ дан 23 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: