使用null值初始化枚举
如何创建具有空值的枚举
例如:
public enum MyEnum { [StringValue("X")] MyX, [StringValue("Y")] MyY, None }
其中None值为null或String.Empty
你可以尝试这样的事情: –
public MyEnum? value= null;
或者你可以尝试这个: –
public MyEnum value= MyEnum.None;
正如所有其他答案所述,您不能将枚举值设为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
使用 ”?” 可以为空的类型的oeprator !!
public MyEnum? myEnum= 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 }
如果声明一个可为空的实例 – myenum?
则可以对枚举进行null
引用myenum?
。
没有“具有空值的枚举”这样的东西。 C#中的枚举只是一个命名整数。 在您的情况下, None
只是2
的别名(为了完整性, MyX
为0
, MyY
为1
)。 默认情况下,枚举的基础数据类型是int
,但它也可以是不同大小/符号的其他基于整数的基本类型。
如果你想要一个“null”枚举,你将不得不使用MyEnum?
,又名Nullable
。