Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Processing Enums
Message
 
 
To
All
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Title:
Processing Enums
Environment versions
Environment:
C# 4.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Miscellaneous
Thread ID:
01607747
Message ID:
01607747
Views:
44
Hi everybody,

We have the following code to process Enums and convert them into a list of values to select from
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.

The problem is - how to now resolve it to use the actual value of enum instead of its number?

Thanks in advance.
If it's not broken, fix it until it is.


My Blog
Next
Reply
Map
View

Click here to load this message in the networking platform