Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Processing Enums
Message
 
 
À
Tous
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Titre:
Processing Enums
Versions des environnements
Environment:
C# 4.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01607747
Message ID:
01607747
Vues:
43
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
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform