Biorąc pod uwagę arbitralne wyliczenie w C #, w jaki sposób mogę wybrać wartość losową?
(Nie znalazłem tego bardzo podstawowego pytania w SO. Za chwilę opublikuję swoją odpowiedź jako punkt odniesienia dla każdego, ale możesz napisać własną odpowiedź.)
random
w ciasnej pętli - w przeciwnym razie uzyskasz tę samą wartość.Użyj Enum.GetValues, aby pobrać tablicę wszystkich wartości. Następnie wybierz losowy element tablicy.
Test:
->
źródło
Możesz po prostu zrobić to:
Nie ma potrzeby przechowywania tablic
źródło
GetNames
zwraca tablicę.Oto alternatywna wersja jako
Extension Method
usingLINQ
.źródło
Zadzwoń
Enum.GetValues
; zwraca to tablicę, która reprezentuje wszystkie możliwe wartości wyliczenia. Wybierz losowy element z tej tablicy. Przerzuć ten element z powrotem do oryginalnego typu wyliczenia.źródło
Oto jego ogólna funkcja. Utrzymuj tworzenie RNG poza kodem wysokiej częstotliwości.
Przykład użycia:
źródło
Osobiście jestem fanem metod rozszerzających, więc użyłbym czegoś takiego (chociaż nie jest to rozszerzenie, wygląda podobnie):
źródło
public static T Of<T>() where T : Enum
docs.microsoft.com/en-us/visualstudio/releasenotes/ ...Dostosowane jako rozszerzenie klasy Random:
Przykład użycia:
źródło
Możesz także rzucić losową wartość:
Ale powinieneś użyć lepszego randomizera, takiego jak ten w mojej bibliotece .
źródło