Numeric constants in enum (c#)

橙三吉。 提交于 2019-12-02 13:23:24

问题


I'm creating this selectbox in a SharePoint web part and need to have a drop down with the current version so I need to use an Enum.

public enum SelectVersionEnum { 2010, 2007 };

Well you can see where it breaks, is there any way to use integers in a enum? Most of all I'd like to use

public enum SelectVersionEnum { 2010=14, 2007=12 };

回答1:


No, you can not name enums with integer names.

An enum value name is a normal identifier and must follow the same rules as everything else.

You can, however, use:

public enum SelectVersionEnum
{
    Version2007 = 12,
    Version2010 = 14
}

Additionally, Enum.Parse can parse strings with integers into their corresponding enum value, even if value described in the string doesn't exist.

Try the following in LINQPad:

void Main()
{
    Enum.Parse(typeof(SelectVersionEnum), "12").Dump();
    Enum.Parse(typeof(SelectVersionEnum), "14").Dump();
    Enum.Parse(typeof(SelectVersionEnum), "2007").Dump();
}

public enum SelectVersionEnum
{
    Version2007 = 12,
    Version2010 = 14
}

The output:

Version2007
Version2010
2007

What do you think would've happened if you defined the following:

public enum SelectVersionEnum
{
    12 = 14,
    14 = 16
}

Does the string "14" now mean "12" or "14"?




回答2:


Enum members must be valid C# identifiers.
They cannot start with numbers.

Instead, you can use something like Office2007, Office2010 or V2007, V2010.




回答3:


No, enum identifiers can't start with a numeric character.




回答4:


You can add an extension method to your enum like any other type.

So you could create an extension for your SelectVersionEnum to help you get the enum values in the right format...

public static class SelectVersionEnumExtension
{
     public static int Version(this SelectVersionEnum enumValue)
     {
         return 0; // Obviously you should return something meaningful here..
     }
}

This gives you a lot of flexibilty.




回答5:


One way you could have numeric values associated with enums is by using the description attribute. For example you might have the enum:

[Serializable]
public enum SelectVersionEnum
{
    [Description("2007")]
    v2007,
    [Description("2010")]
    v2010
}

You could then write an extension method to get the numeric value you are looking for.

public static string Description(this Enum value)
{
    var type = value.GetType();

    var name = Enum.GetName(type, value);

    if (name != null)
    {
        if (type.GetField(name) != null)
        {
            var attr = Attribute.GetCustomAttribute(type.GetField(name), typeof(DescriptionAttribute)) as DescriptionAttribute;

            return attr != null ? attr.Description : name;
        }
    }

    return null;

} // end

You would use it like this:

var version = SelectVersionEnum.v2007.Description();


来源:https://stackoverflow.com/questions/5299658/numeric-constants-in-enum-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!