使用null值初始化枚举

时间:2012-11-28 12:40:50

标签: c# .net

如何创建具有空值的枚举

例如:

public enum MyEnum
{
    [StringValue("X")]
    MyX,
    [StringValue("Y")]
    MyY,      
    None
}

其中None值为null或String.Empty

5 个答案:

答案 0 :(得分:17)

您可以尝试这样的事情: -

public MyEnum? value= null;

或者你可以试试这个: -

 public MyEnum value= MyEnum.None;

答案 1 :(得分:5)

正如所有其他答案所述,不能枚举值为null。 您可以做的是添加Description属性(如StringValue),该属性具有空值。

例如:

public enum MyEnum
{
    [Description(null)]
    None = 0,
    [Description("X")]
    MyX,
    [Description("Y")]
    MyY
}

您可以使用以下功能获取Enum的描述:

    public static string GetEnumDescription(Enum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());

        DescriptionAttribute[] attributes =
            (DescriptionAttribute[])fi.GetCustomAttributes(
            typeof(DescriptionAttribute),
            false);

        if (attributes != null && attributes.Length > 0)
            return attributes[0].Description;
        else
            return value.ToString();
    }

<强>用法:

MyEnum e = MyEnum.None;
string s2 = GetEnumDescription((MyEnum)e); // This returns null

答案 2 :(得分:4)

所有枚举类型都是值类型,不同的成员也是从成员类型派生的(允许的类型是bytesbyteshortushort,{{ 1}},intuintlong - 为documented)。

这意味着枚举的成员不能是ulong

处理默认null值的一种方法是将enum值作为第一个值并将其设置为负值(对于签名枚举)或None。< / p>

0

如果声明可以为空的实例 - public enum MyEnum { [StringValue(null)] None = -1, [StringValue("X")] MyX, [StringValue("Y")] MyY } ,则可以对枚举进行null引用。

答案 3 :(得分:4)

使用“?”可操作类型的运算符!!

public MyEnum? myEnum= null;

答案 4 :(得分:2)

没有“具有空值的枚举”这样的东西。 C#中的枚举只是一个命名整数。在您的情况下,None只是2的别名(为了完整性,MyX0MyY1)。默认情况下,枚举的基础数据类型为int,但它也可以是不同大小/符号的其他基于整数的基本类型。

如果您想要“null”枚举,则必须使用MyEnum?,即Nullable<MyEnum>