我有一个enum

string name;

public enum Color
{
  Red,
  Green,
  Yellow
}

如何将它设置为NULL加载。

name = "";
Color color = null; //error

编辑: 我的错,我没有解释清楚。但所有与nullable相关的答案都是完美的。我的情况是什么,如果,我有获得/设置enum类中的其他元素,如名称等。在页面加载,我初始化类,并尝试默认值为空。下面是场景(代码是c#):

namespace Testing
{
    public enum ValidColors
    {
        Red,
        Green,
        Yellow
    }

    public class EnumTest
    {
        private string name;
        private ValidColors myColor;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public ValidColors MyColor
        {
            get { return myColor; }
            set { myColor = value; }
        }

    }

    public partial class _Default : System.Web.UI.Page
    {       
        protected void Page_Load(object sender, EventArgs e)
        {
            EnumTest oEnumTest = new EnumTest();
            oEnumTest.Name = "";
            oEnumTest.MyColor = null; //???
        }
    }

}

然后使用下面的建议,我修改了上面的代码,使其与get和set方法一起工作。我只需要在EnumTest类中声明私有枚举变量和get/set方法中添加“?”:

public class EnumTest
{
    private string name;
    private ValidColors? myColor; //added "?" here in declaration and in get/set method

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public ValidColors? MyColor
    {
        get { return myColor; }
        set { myColor = value; }
    }

}

谢谢大家的建议。


当前回答

您可以对可空类型使用“?”操作符。

public Color? myColor = null;

或者使用不能为空的枚举的标准实践,将枚举中的FIRST值(即0)作为默认值。例如,在颜色的情况下。

public Color myColor = Color.None;

其他回答

如果这是c#,它将不起作用:enum是值类型,不能为空。

正常的选项是添加一个None成员:

public enum Color
{
  None,
  Red,
  Green,
  Yellow
}

Color color = Color.None;

...或者使用Nullable:

Color? color = null;

您可以对可空类型使用“?”操作符。

public Color? myColor = null;

或者使用不能为空的枚举的标准实践,将枚举中的FIRST值(即0)作为默认值。例如,在颜色的情况下。

public Color myColor = Color.None;

使你的变量为空。如:

Color? color = null;

or

Nullable<Color> color = null;

显式地将值0赋值为None不是更好吗 常量?为什么?

因为默认enum值等于0,如果你调用default(Color),它将打印None。

因为它在第一个位置,将文字值0赋给任何其他常数都会改变这种行为,改变出现顺序也会改变default(Color)的输出(https://stackoverflow.com/a/4967673/8611327)

枚举在c#中是一种“值”类型(意味着枚举被存储为任何值,而不是作为内存中存储值本身的位置的引用)。不能将值类型设置为null(因为null仅用于引用类型)。

也就是说,你可以使用内置的Nullable<T>类,它包装值类型,这样你就可以将它们设置为null,检查它是否HasValue并获得它的实际值。(这些都是Nullable<T>对象上的方法。

name = "";
Nullable<Color> color = null; //This will work.

还有一个你可以使用的快捷方式:

Color? color = null;

这与Nullable<Color>相同;