12

如何创建具有空值的枚举

前任:

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

其中 None 值为 null 或 String.Empty

4

5 回答 5

21

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

public MyEnum? value= null;

或者你可以试试这个: -

 public MyEnum value= MyEnum.None;
于 2012-11-28T12:44:14.513 回答
5

正如所有其他答案所说,您不能将枚举值设为空。您可以做的是添加一个具有空值的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
于 2012-11-28T12:53:54.910 回答
4

所有枚举类型都是值类型,并且不同的成员也派生自成员类型(允许的类型是byte, sbyte, short, ushort, int, uint, long, 或ulong- 如文档所示)。

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

处理默认enum值的一种方法是将None值作为第一个值并将其设置为负值(对于有符号枚举)或0.

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

null如果您声明一个可为空的实例 - ,则可以引用枚举myenum?

于 2012-11-28T12:47:37.280 回答
4

使用 ”?” 可空类型的操作符!!

public MyEnum? myEnum= null;
于 2012-11-28T12:48:01.247 回答
2

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

如果您想要一个“空”枚举,则必须使用MyEnum?,也就是Nullable<MyEnum>

于 2012-11-28T12:48:35.187 回答