如何将枚举设置为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;