枚举中的数字常量(c#)

时间:2011-03-14 14:06:06

标签: c# enums constants numeric

我在SharePoint Web部件中创建此选择框,需要使用当前版本下拉,因此我需要使用枚举。

public enum SelectVersionEnum { 2010, 2007 };

那么你可以看到它在哪里断开,有没有办法在枚举中使用整数? 最重要的是我想用

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

5 个答案:

答案 0 :(得分:7)

枚举成员必须是有效的C#标识符 他们不能从数字开始。

相反,您可以使用Office2007, Office2010V2007, V2010等内容。

答案 1 :(得分:7)

不,您不能使用整数名称命名枚举。

枚举值名称是普通标识符,必须遵循与其他所有内容相同的规则。

但是,您可以使用:

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

此外,Enum.Parse可以将带有整数的字符串解析为相应的枚举值,即使字符串中描述的值不存在也是如此。

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
}

输出:

Version2007
Version2010
2007

如果您定义以下内容,您认为会发生什么:

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

字符串“14”现在是“12”还是“14”?

答案 2 :(得分:3)

不,枚举标识符不能以数字字符开头。

答案 3 :(得分:2)

您可以像任何其他类型一样为枚举添加扩展方法。

因此,您可以为SelectVersionEnum创建一个扩展名,以帮助您以正确的格式获取枚举值...

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

这为您提供了很多灵活性。

答案 4 :(得分:1)

您可以使用与enum关联的数值的一种方法是使用description属性。例如,你可能有枚举:

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

然后,您可以编写扩展方法来获取您要查找的数值。

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

您可以这样使用它:

var version = SelectVersionEnum.v2007.Description();