使用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; 

所有枚举类型都是值类型,不同的成员也是从成员类型派生的(允许的类型是bytesbyteshortushortintuintlongulong – 如文档所述 )。

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

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

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

如果声明一个可为空的实例 – myenum?则可以对枚举进行null引用myenum?

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

如果你想要一个“null”枚举,你将不得不使用MyEnum? ,又名Nullable