HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpCritical

Getting attributes of Enum's value

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
enumgettingattributesvalue

Problem

I would like to know if it is possible to get attributes of the enum values and not of the enum itself? For example, suppose I have the following enum:

using System.ComponentModel; // for DescriptionAttribute

enum FunkyAttributesEnum
{
    [Description("Name With Spaces1")]
    NameWithoutSpaces1,    
    [Description("Name With Spaces2")]
    NameWithoutSpaces2
}


What I want is given the enum type, produce 2-tuples of enum string value and its description.

Value was easy:

Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
    Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);


But how do I get description attribute's value, to populate Tuple.Desc? I can think of how to do it if the Attribute belongs to the enum itself, but I am at a loss as to how to get it from the value of the enum.

Solution

This should do what you need.
try {
var enumType = typeof(FunkyAttributesEnum);

var memberInfos = enumType
.GetMember(FunkyAttributesEnum.NameWithoutSpaces1.ToString());

var enumValueMemberInfo = memberInfos
.FirstOrDefault(m => m.DeclaringType == enumType);

var valueAttributes = enumValueMemberInfo
.GetCustomAttributes(typeof(DescriptionAttribute), false);

var description = ((DescriptionAttribute)valueAttributes[0])
.Description;

} catch {
return FunkyAttributesEnum.NameWithoutSpaces1.ToString()
}

Context

Stack Overflow Q#1799370, score: 553

Revisions (0)

No revisions yet.