Exemplo n.º 1
0
        internal static string ToString(T enumVal)
        {
            FieldInfo           fi         = enumVal.GetType().GetTypeInfo().GetDeclaredField(enumVal.ToString());
            EnumStringAttribute stringAttr = fi.GetCustomAttribute <EnumStringAttribute>();

            if (stringAttr != null)
            {
                return(stringAttr.Value);
            }
            else
            {
                return(string.Empty);
            }
        }
Exemplo n.º 2
0
        internal static bool TryGetEnumValue(string stringVal, out T result)
        {
            if (parseCount > Threshold)
            {
                if (stringToValueLookupTable == null)
                {
                    // build a look up table to improve performance.
                    Dictionary <string, T> lookupTable = new Dictionary <string, T>();

                    Array values = Enum.GetValues(typeof(T));
                    foreach (T enumVal in values)
                    {
                        FieldInfo           fi         = enumVal.GetType().GetTypeInfo().GetDeclaredField(enumVal.ToString());
                        EnumStringAttribute stringAttr = fi.GetCustomAttribute <EnumStringAttribute>();

                        lookupTable.Add(stringAttr.Value, enumVal);
                    }

                    stringToValueLookupTable = lookupTable;
                }

                Debug.Assert(stringToValueLookupTable != null && stringToValueLookupTable.Count > 0);
                return(stringToValueLookupTable.TryGetValue(stringVal, out result));
            }
            else
            {
                parseCount++;

                Array values = Enum.GetValues(typeof(T));

                foreach (T enumVal in values)
                {
                    FieldInfo           fi         = enumVal.GetType().GetTypeInfo().GetDeclaredField(enumVal.ToString());
                    EnumStringAttribute stringAttr = fi.GetCustomAttribute <EnumStringAttribute>();

                    if (stringAttr != null && stringAttr.Value == stringVal)
                    {
                        result = enumVal;
                        return(true);
                    }
                }

                result = new T();
                return(false);
            }
        }