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); } }
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); } }