using System.ComponentModel;
public static void Main()
const MyEnum expected = MyEnum.Bar;
var actual = GetValueFromDescription<MyEnum, DescriptionAttribute>("Bar Lorem");
Console.WriteLine( actual == expected);
[Description("Bar Lorem")]
[Description("Foo Lorem")]
public static T GetValueFromDescription<T, TAttribute>(string description) where TAttribute : System.Attribute
var descriptionType = typeof(TAttribute);
if(!type.IsEnum) throw new InvalidOperationException();
foreach(var field in type.GetFields())
TAttribute attribute = (TAttribute)Attribute.GetCustomAttribute(field, descriptionType);
if(attribute.Description == description)
return (T)field.GetValue(null);
if(field.Name == description)
return (T)field.GetValue(null);
throw new ArgumentException("Not found.", "description");