I
was using it frequently but missed to post it. Let's see how to create a simple
Enum extension method and how to transform Enums in to list/dictionary with its
DisplayName or Description attribute.
Helper:
Implementation:
Helper:
using System; using System.ComponentModel; using System.Reflection; namespace EnumHelper { public static class EnumExtensions { public static string ToDescription(this Enum value) { FieldInfo field; DescriptionAttribute attribute; string result; field = value.GetType().GetField(value.ToString()); attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)); result = attribute != null ? attribute.Description : string.Empty; return result; } public static bool HasDescription(this Enum someEnum) { return !string.IsNullOrEmpty(someEnum.ToDescription()); } public static string ToDisplayName(this Enum value) { FieldInfo field; DisplayNameAttribute attribute; string result; field = value.GetType().GetField(value.ToString()); attribute = (DisplayNameAttribute)Attribute.GetCustomAttribute(field, typeof(DisplayNameAttribute)); result = attribute != null ? attribute.DisplayName : string.Empty; return result; } public static bool HasDisplayName(this Enum someEnum) { return !string.IsNullOrEmpty(someEnum.ToDisplayName()); } public static int ToValue(this Enum someEnum) { return Convert.ToInt32(someEnum); } } }
Implementation:
using System; using System.ComponentModel; using System.Linq; namespace EnumHelper { enum PrimaryColors { [Description("R for Red")] [DisplayName("R")] Red = 1, [Description("G for Green")] [DisplayName("G")] Green = 1, [Description("B for Blue")] [DisplayName("B")] Blue = 4 } class Program { static void Main(string[] args) { var hasDescription = PrimaryColors.Red.HasDescription(); var dataDescription = PrimaryColors.Red.ToDescription(); Console.WriteLine($"hasDescription: {hasDescription}"); Console.WriteLine($"dataDescription: {dataDescription}"); var dataText = PrimaryColors.Red.ToString(); Console.WriteLine($"dataText: {dataText}"); var dataValue = PrimaryColors.Red.ToValue(); Console.WriteLine($"dataValue: {dataValue}"); var hasDIsplayName = PrimaryColors.Red.HasDisplayName(); var dataDiaplayName = PrimaryColors.Red.ToDisplayName(); Console.WriteLine($"hasDIsplayName: {hasDIsplayName}"); Console.WriteLine($"dataDiaplayName: {dataDiaplayName}"); var listText = Enum.GetValues(typeof(PrimaryColors)).Cast<PrimaryColors>().Select( d => d.ToString()).ToList(); var listValues = Enum.GetValues(typeof(PrimaryColors)).Cast<int>().ToList(); var dictionary_with_value_and_description = Enum.GetValues(typeof(PrimaryColors)) .Cast<PrimaryColors>() .ToDictionary( data => data.ToValue(), data => data.ToDescription()); var dictionary_with_value_and_display_name = Enum.GetValues(typeof(PrimaryColors)) .Cast<PrimaryColors>() .ToDictionary(data => data.ToValue(), data => data.ToDisplayName()); //Note: We can assign duplicate value like Red = 1, Green = 1. But having duplicate may lead error/affect resultset if we filter/parse. Console.Read(); } } }