/// <summary> /// Gets the enum value from EnumMemberAttribute's value. /// </summary> /// <typeparam name="TEnum">The type of enum.</typeparam> /// <param name="value">The EnumMemberAttribute's value.</param> /// <param name="ignoreCase">ignores the case when comparing values.</param> /// <returns>TEnum.</returns> /// <exception cref="ArgumentException">No XmlEnumAttribute code exists for type " + typeof(TEnum).ToString() + " corresponding to value of " + value</exception> public static TEnum ToEnum <TEnum>(this string value, bool ignoreCase = true) where TEnum : struct, Enum { // Try to parse it normally on the first try if (Enum.TryParse <TEnum>(value, ignoreCase, out var result)) { return(result); } // Try with value from EnumMemberAttribute if (EnumNameMapper <TEnum> .TryGetValue(value, ignoreCase, out result)) { return(result); } throw new ArgumentException($"Value '{value}' is not a valid enum name of '{typeof(TEnum)}' ({nameof(ignoreCase)}={ignoreCase}). Valid values are: {string.Join(", ", EnumNameMapper<TEnum>.GetNames())}."); }