C# using numbers in an enum

前端 未结 8 1402
迷失自我
迷失自我 2020-11-30 03:02

This is a valid enum

public enum myEnum
{
  a= 1,
  b= 2,
  c= 3,
  d= 4,
  e= 5,
  f= 6,
  g= 7,
  h= 0xff
};

But this is not



        
8条回答
  •  难免孤独
    2020-11-30 03:40

    No identifier at all in C# may begin with a number (for lexical/parsing reasons). Consider adding a [Description] attribute to your enum values:

    public enum myEnum
    {
        [Description("1A")]
        OneA = 1,
        [Description("2A")]
        TwoA = 2,
        [Description("3A")]
        ThreeA = 3,
    };
    

    Then you can get the description from an enum value like this:

    ((DescriptionAttribute)Attribute.GetCustomAttribute(
        typeof(myEnum).GetFields(BindingFlags.Public | BindingFlags.Static)
            .Single(x => (myEnum)x.GetValue(null) == enumValue),    
        typeof(DescriptionAttribute))).Description
    

    Based on XSA's comment below, I wanted to expand on how one could make this more readable. Most simply, you could just create a static (extension) method:

    public static string GetDescription(this Enum value)
    {
        return ((DescriptionAttribute)Attribute.GetCustomAttribute(
            value.GetType().GetFields(BindingFlags.Public | BindingFlags.Static)
                .Single(x => x.GetValue(null).Equals(value)),
            typeof(DescriptionAttribute)))?.Description ?? value.ToString();
    }
    

    It's up to you whether you want to make it an extension method, and in the implementation above, I've made it fallback to the enum's normal name if no [DescriptionAttribute] has been provided.

    Now you can get the description for an enum value via:

    myEnum.OneA.GetDescription()
    

提交回复
热议问题