I was looking for a way to restrict a generic type identifier to only allow enums. Since you are not allowed to use
where T : Enum, I checked the metadata
Enum and found that it implements
You can't use
ValueType as restriction, but
struct works fine.
In other words, use “
where T : struct, IComparable, IFormattable, IConvertible” to make a type restriction which should work well as an enum restriction.
The reason why I needed the specification is that I want to be able to fetch the
DescriptionAttribute from enums. I use it to be able to add friendly names to enum values.
public enum MyEnum
MyEnum value = MyEnum.FooBar;
The extension method that does the magic:
public static string GetDescription<T>(this T instance)
where T : struct, IConvertible, IFormattable, IComparable
var type = typeof (T);
var memberInfo = type.GetMember(instance.ToString());
var attribute = (DescriptionAttribute)memberInfo.GetCustomAttributes(
return attribute == null ? instance.ToString() : attribute.Description;