我有一个枚举
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; //???
}
}
}
然后使用下面的建议我更改了上面的代码,使其适用于get和set方法。我只需要添加“?”在声明私有枚举变量和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; }
}
}
感谢所有可爱的建议。
答案 0 :(得分:318)
你可以使用“?”可操作类型的运算符。
public Color? myColor = null;
或者通过使枚举(即0)中的FIRST值成为默认值,使用不能为null的枚举的标准做法。例如,在颜色为无的情况下。
public Color myColor = Color.None;
答案 1 :(得分:39)
如果这是C#,它将无效:枚举是值类型,不能是null
。
正常选项是添加None
成员:
public enum Color
{
None,
Red,
Green,
Yellow
}
Color color = Color.None;
...或使用Nullable
:
Color? color = null;
答案 2 :(得分:18)
让你的变量可以为空。像:
Color? color = null;
或
Nullable<Color> color = null;
答案 3 :(得分:8)
枚举是C#中的“值”类型(意味着枚举存储为它的任何值,而不是作为对存储值本身的内存中的位置的引用)。您不能将值类型设置为null(因为null仅用于引用类型)。
话虽如此,您可以使用包含值类型的内置Nullable<T>
类,以便将它们设置为null,检查它是否为HasValue
并获取其实际Value
。 (这些都是Nullable<T>
对象的方法。
name = "";
Nullable<Color> color = null; //This will work.
您还可以使用快捷方式:
Color? color = null;
这与Nullable<Color>
;
答案 4 :(得分:4)
我在这里假设c ++。如果你正在使用c#,答案可能是相同的,但语法会有所不同。 枚举是一组int值。它不是一个对象,所以你不应该将它设置为null。将something设置为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;
答案 5 :(得分:0)
将值0明确分配给
None
会不会更好 不变?为什么?
因为默认的enum
值等于0,所以如果您调用default(Color)
,它将打印None
。
因为它在第一个位置,所以将字面值0分配给任何其他常量将改变该行为,而且发生顺序的改变也将改变default(Color)
(https://stackoverflow.com/a/4967673/8611327)的输出
答案 6 :(得分:-2)
Color? color = null;
或者您可以使用
Color? color = new Color?();
分配null无效的示例
color = x == 5 ? Color.Red : x == 9 ? Color.Black : null ;
因此您可以使用:
color = x == 5 ? Color.Red : x == 9 ? Color.Black : new Color?();