T[] enumValues = (T[])Enum.GetValues(typeof(T)); string[] enumNames = (string[])Enum.GetNames(typeof(T)); for (int i = 0; i < enumValues.Length; i++) { bool selected = false; object enumUnderlyingValue = Convert.ChangeType(enumValues[i], enumUnderlyingType); if (omitEnumValue != null && enumUnderlyingValue.Equals(omitUnderlyingValue)) { // The Enum value matches the omitValue parameter, so we won't process it. // This check is for enums that have a default value such as NotSpecified // which we may not always want to include in a dropdown. } else { Int32 enumValue = Convert.ToInt32(enumUnderlyingValue); string enumName = GetFormattedEnumName<T>(enumNames[i]); if (selectedUnderlyingValue != null) { selected = enumUnderlyingValue.Equals(selectedUnderlyingValue) ? true : false; } items.Add(GetNewSelectViewModel(selected, enumName, enumValue)); } }There is, unfortunately, a bug here. This code assumes that each enum simply has values corresponding to their number in the list, which is not true. Say, I have the following enum
public enum LookupTypes : byte { [Description("Select Lookup Method")] Typing = 1, HotKeySelect = 2, SingleKeyLookup = 3, MultiKeyLookup = 4 } }and I noticed that my drop-down didn't have the value I specified as selected using this code
var lookupTypes = EnumUtilities.EnumToEnumViewModel<LookupTypes>(selectEnumValue: LookupTypes.Typing);so I started to debug this code and thus how I found this bug.