lundi 31 juillet 2017

C# - Get Description Attributes From a Flagged Enum

I am trying to create an extension method that will return a List<string> containing all the Description attributes for only the set values of a given [Flags] Enum.

For example, suppose I have the following enum declared in my C# code:

[Flags]
public enum Result
{
    [Description("Value 1 with spaces")]
    Value1 = 1,
    [Description("Value 2 with spaces")]
    Value2 = 2,
    [Description("Value 3 with spaces")]
    Value3 = 4,
    [Description("Value 4 with spaces")]
    Value4 = 8
}

And then have a variable set as:

Result y = Result.Value1 | Result.Value2 | Result.Value4;

So, the call I want to create would be:

List<string> descriptions = y.GetDescriptions();

and the final result would be:

descriptions = { "Value 1 with spaces", "Value 2 with spaces", "Value 4 with spaces" };

I have created an extension method for getting the single description attribute for an Enum that can not have multiple flags set that is along the following lines:

public static string GetDescription(this Enum value)
{
    Type type = value.GetType();
    string name = Enum.GetName(type, value);
    if (name != null)
    {
        System.Reflection.FieldInfo field = type.GetField(name);
        if (field != null)
        {
            DescriptionAttribute attr =
                   Attribute.GetCustomAttribute(field,
                     typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attr != null)
            {
                return attr.Description;
            }
        }
    }
    return null;
}

And I've found some answers online on how to get ALL the Description attributes for a given Enum type (such as here), but I'm having problems writing a generic extension method to return the list of descriptions for only the set attributes.

Any help would be really appreciated.

THANKS!!





Aucun commentaire:

Enregistrer un commentaire