如何将枚举设置为null

我有一个枚举

string name; public enum Color { Red, Green, Yellow } 

如何在加载时将其设置为NULL。

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

编辑:我的坏,我没有正确解释。 但所有有关可空的答案都是完美的。 我的情况是,如果,我已经得到/设置为其他元素如名称等在类中的枚举。在页面加载我初始化类,并尝试默认值为null。 这是情况(代码是在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; //??? } } } 

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

 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; } } } 

感谢所有可爱的build议。

你可以使用“?” 运算符为可空types。

 public Color? myColor = null; 

或者将枚举中的FIRST值(也就是0)作为默认值,使用不能为空的枚举的标准做法。 例如在颜色为None的情况下。

 public Color myColor = Color.None; 

如果这是C#,它将不起作用:枚举是值types,不能为null

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

 public enum Color { None, Red, Green, Yellow } Color color = Color.None; 

…或使用Nullable

 Color? color = null; 

让你的variables为空。 喜欢:

 Color? color = null; 

要么

 Nullable<Color> color = null; 

枚举是C#中的“值”types(意味着枚举被存储为它的值,而不是对值集合的引用)。 您不能将值types设置为null(因为null仅用于引用types)。

这就是说,你可以使用内置的Nullable<T>类来包装值types,以便您可以将它们设置为null,检查它是否HasValue并获取其实际Value 。 (这些都是Nullable<T>对象的两种方法。

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

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

 Color? color = null; 

这与Nullable<Color>相同。

我在这里假设c ++。 如果你使用c#,答案可能是相同的,但是语法会有些不同。 枚举是一组int值。 这不是一个对象,所以你不应该把它设置为null。 设置为null意味着你指向一个指向一个对象的指针来寻址零。 你不能用int来做到这一点。 你想用int来做什么是把它设置为一个你通常不会拥有的值,这样你就可以打电话了,如果它是一个很好的值。 所以,设置你的颜色为-1

 Color color = -1; 

或者,你可以从1开始你的枚举并将其设置为零。 如果现在将颜色设置为零,则会将其设置为“红色”,因为枚举中的红色为零。

所以,

 enum Color { red =1 blue, green } //red is 1, blue is 2, green is 3 Color mycolour = 0;