如何创建具有空值的枚举
前任:
public enum MyEnum
{
[StringValue("X")]
MyX,
[StringValue("Y")]
MyY,
None
}
其中 None 值为 null 或 String.Empty
你可以尝试这样的事情: -
public MyEnum? value= null;
或者你可以试试这个: -
public MyEnum value= MyEnum.None;
正如所有其他答案所说,您不能将枚举值设为空。您可以做的是添加一个具有空值的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
所有枚举类型都是值类型,并且不同的成员也派生自成员类型(允许的类型是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?
。
使用 ”?” 可空类型的操作符!!
public MyEnum? myEnum= null;
没有“具有空值的枚举”之类的东西。C# 中的枚举只是一个命名整数。在您的情况下,None
只是2
(为了完整性,MyX
is0
和MyY
is 1
)的别名。默认情况下,枚举的基础数据类型是int
,但它也可以是其他不同大小/符号的基于整数的原始类型。
如果您想要一个“空”枚举,则必须使用MyEnum?
,也就是Nullable<MyEnum>
。