Given an arbitrary enumeration in C#, how do I select a random value?
(I did not find this very basic question on SO. I'll post my answer in a minute as reference for anyone, but please feel free to post your own answer.)
Given an arbitrary enumeration in C#, how do I select a random value?
(I did not find this very basic question on SO. I'll post my answer in a minute as reference for anyone, but please feel free to post your own answer.)
Use Enum.GetValues to retrieve an array of all values. Then select a random array item.
static readonly Random _Random = new Random();
static T RandomEnumValue<T> ()
{
return Enum
.GetValues (typeof (T))
.Cast<T> ()
.OrderBy (x => _Random.Next())
.FirstOrDefault ();
}
Test:
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
Call Enum.GetValues
; this returns an array that represents all possible values for your enum. Pick a random item from this array. Cast that item back to the original enum type.
Array values = Enum.GetValues(typeof(Bar));
Random random = new Random();
Bar randomBar = (Bar)values.GetValue(random.Next(values.Length));