Учитывая произвольное перечисление в C #, как выбрать случайное значение?
(Я не нашел этот очень простой вопрос на SO. Я опубликую свой ответ через минуту как справку для любого, но, пожалуйста, не стесняйтесь размещать свой собственный ответ.)
Array values = Enum.GetValues(typeof(Bar));
Random random = new Random();
Bar randomBar = (Bar)values.GetValue(random.Next(values.Length));
random
в узком цикле - иначе вы будете продолжать получать то же значение.Используйте Enum.GetValues, чтобы получить массив всех значений. Затем выберите случайный элемент массива.
Тест:
->
источник
Вы можете просто сделать это:
Нет необходимости хранить массивы
источник
GetNames
возвращает массив.Вот альтернативная версия как
Extension Method
использованиеLINQ
.источник
Звонок
Enum.GetValues
; это возвращает массив, который представляет все возможные значения для вашего перечисления. Выберите случайный элемент из этого массива. Приведите этот предмет обратно к исходному типу перечисления.источник
Вот общая функция для этого. Держите создание ГСЧ за пределами высокочастотного кода.
Пример использования:
источник
Лично я фанат методов расширения, поэтому я бы использовал что-то вроде этого (хотя на самом деле это не расширение, оно выглядит примерно так):
источник
public static T Of<T>() where T : Enum
docs.microsoft.com/en-us/visualstudio/releasenotes/…Адаптировано как расширение класса Random:
Пример использования:
источник
Вы также можете привести случайное значение:
Но вы должны использовать лучший рандомизатор, подобный тому, который есть в моей библиотеке .
источник