public static I RandomEnumeration<I>() { I enumerationToCheck; Int32 indexToUse; String[] names; //Use activator to create an instance of the type I enumerationToCheck = System.Activator.CreateInstance<I>(); //Make sure the instance is an Enumeration //Unfortunately you can't check that in the method //delcaring using "which". if (enumerationToCheck as Enum == null) { throw new InvalidOperationException(); } //Get the list of the enumeration item names names = Enum.GetNames(typeof(I)); if (names.Length > 0) { //Grab a random name within the boundaries of the //names collection. indexToUse = RandomInt32(0, names.Length); //parse the name to create the random enum enumerationToCheck = (I)Enum.Parse(typeof(I), names[indexToUse]); } return enumerationToCheck; }
Usage:
SomeEnum test = RandomEnumeration();
Why bother? For unit testing and creating test classes. Possibly
for defaults on an enumeration, but not really needed since
they are value types. Oh yeah AND BECAUSE I FELT LIKE IT. I don’t
have to explain myself to you.