use*_*534 22 c# enums properties set
我有一个类enum属性,如下所示:
public class Foo
{
public Color ColorType {get;set;}
}
public enum Color
{
Red,
Green,
}
Run Code Online (Sandbox Code Playgroud)
现在这个类可以像这样初始化:
var foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
没有设置ColorType属性.现在,我正在尝试创建一个方法并对是否设置枚举执行操作,例如我有一个方法
private void checkEnum(Foo foo)
{
if(foo.ColorType !=null)
{
//perform these actions
}else
{
//perform those actions
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我得到一个警告,说值永远不会为空,经过进一步的研究,如果枚举永远不会被设置,如果默认为第一个值,在我的情况下是红色,我在考虑为我的枚举添加一个值是'未设置'并将该值设为第一个,所以如果没有设置,那么枚举将具有'未设置'的值,是否有更好的方法这样做,我提出的方法似乎可能会变得混乱
Mic*_*per 36
您可以使用以下两种方法之一:默认枚举值或可以为空的枚举.
默认枚举值
由于枚举由整数支持,int默认为零,因此枚举将始终默认初始化为等于零的值.除非您明确指定枚举值,否则第一个值将始终为零,第二个值将为1,依此类推.
public enum Color
{
Undefined,
Red,
Green
}
// ...
Assert.IsTrue(Color.Undefined == 0); // success!
Run Code Online (Sandbox Code Playgroud)
可空的枚举
处理未分配枚举的另一种方法是使用可空字段.
public class Foo
{
public Color? Color { get; set; }
}
// ...
var foo = new Foo();
Assert.IsNull(foo.Color); // success!
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为底层私有字段可为空,但属性不可以.
例如
class SomeClass
{
private Color? _color; // defaults to null
public Color Color
{
get { return _color ?? Color.Black; }
set { _color = value; }
}
public bool ColorChanged
{
get { return _color != null; }
}
}
Run Code Online (Sandbox Code Playgroud)
这样,如果color == null您知道它尚未设置,并且您也停止用户将其设置为null(或undefined其他答案指定).如果color是null你有100%的把握,该用户没有设置它曾经.
只有catch是由此返回的默认值,get但如果它更符合您的程序,您总是可以抛出异常.
set如果给定值不等于默认值(取决于您的用例),您还可以进一步设置字段:
public Color Color
{
get { return _color ?? Color.Black; }
set
{
if (value != Color)
{
_color = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)