How to set enum to null
我有一个枚举
1 2 3 4 5 6 7 8 | string name; public enum Color { Red, Green, Yellow } |
如何在加载时将其设置为空。
1 2 | name =""; Color color = null; //error |
编辑:我的错,我没解释清楚。但是所有与nullable相关的答案都是完美的。我的情况是,如果在具有其他元素(如名称等)的类中为枚举设置了get/set,我将在页面加载时初始化该类并尝试将值默认为空。这里是场景(代码在C中):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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方法。我只需要添加"?"在声明私有枚举变量期间以及在get/set方法中的EnumTest类中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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; } } } |
谢谢大家的建议。
您可以使用"?"可为空类型的运算符。
1 | public Color? myColor = null; |
或者对枚举使用标准惯例,如果枚举中的第一个值(即0)是默认值,则不能为空。例如,在颜色为"无"的情况下。
1 | public Color myColor = Color.None; |
如果这是c,它将不起作用:枚举是值类型,不能是
一般的选择是增加一个
1 2 3 4 5 6 7 8 9 | public enum Color { None, Red, Green, Yellow } Color color = Color.None; |
…或使用
1 | Color? color = null; |
使变量可以为空。像:
1 | Color? color = null; |
或
1 | Nullable<Color> color = null; |
枚举是C中的"value"类型(表示枚举存储为任何值,而不是作为对存储值本身的内存中某个位置的引用)。不能将值类型设置为空(因为空仅用于引用类型)。
也就是说,您可以使用内置的
1 2 | name =""; Nullable<Color> color = null; //This will work. |
还有一个快捷方式可以使用:
1 | Color? color = null; |
与
我假设这里是C++。如果您使用的是C,答案可能是相同的,但是语法会有点不同。枚举是一组int值。它不是一个对象,所以您不应该将其设置为空。将某个值设置为空意味着您将指向对象的指针指向地址零。你不能真的用一个int来做这个。你想用一个int来做的是把它设置为一个你通常不会得到的值,这样你就可以知道它是否是一个好值。所以,把你的颜色设为-1
1 | Color color = -1; |
或者,可以从1开始枚举并将其设置为零。如果您将颜色设置为零,那么您将把它设置为"红色",因为红色在枚举中是零。
所以,
1 2 3 4 5 6 7 | enum Color { red =1 blue, green } //red is 1, blue is 2, green is 3 Color mycolour = 0; |