使用null值初始化枚举

Hél*_*ves 10 .net c#

如何创建具有空值的枚举

例如:

public enum MyEnum
{
    [StringValue("X")]
    MyX,
    [StringValue("Y")]
    MyY,      
    None
}
Run Code Online (Sandbox Code Playgroud)

其中None值为null或String.Empty

Rah*_*thi 18

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

public MyEnum? value= null;
Run Code Online (Sandbox Code Playgroud)

或者你可以尝试这个: -

 public MyEnum value= MyEnum.None;
Run Code Online (Sandbox Code Playgroud)

  • @jsobo他们所要求的是不可能的; 这可以作为IMO的答案 (2认同)
  • 抱歉这么钝.答案肯定回答了所问的问题.但是我坚信这个问题实际上是关于如何允许MyEnum.None拥有string.empty的StringValue. (2认同)

sha*_*ari 5

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

public MyEnum? myEnum= null;
Run Code Online (Sandbox Code Playgroud)


Bla*_*hma 5

正如所有其他答案所述,您不能将枚举值设为null.你可以做的是添加一个具有空值的Description属性(如你的StringValue).

例如:

public enum MyEnum
{
    [Description(null)]
    None = 0,
    [Description("X")]
    MyX,
    [Description("Y")]
    MyY
}
Run Code Online (Sandbox Code Playgroud)

您可以使用以下函数获取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();
    }
Run Code Online (Sandbox Code Playgroud)

用法:

MyEnum e = MyEnum.None;
string s2 = GetEnumDescription((MyEnum)e); // This returns null
Run Code Online (Sandbox Code Playgroud)