如何创建具有空值的枚举
例如:
public enum MyEnum
{
[StringValue("X")]
MyX,
[StringValue("Y")]
MyY,
None
}
其中None值为null或String.Empty
答案 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)
所有枚举类型都是值类型,不同的成员也是从成员类型派生的(允许的类型是byte
,sbyte
,short
,ushort
,{{ 1}},int
,uint
或long
- 为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
的别名(为了完整性,MyX
为0
而MyY
为1
)。默认情况下,枚举的基础数据类型为int
,但它也可以是不同大小/符号的其他基于整数的基本类型。
如果您想要“null”枚举,则必须使用MyEnum?
,即Nullable<MyEnum>
。