可空枚举的延迟 属性
Deferred property for nullable enum
当我在 class 中有一个可选的 属性 可以为 null 时,我使用以下模式来延迟它。我还使用整数等值类型的变体。
string myType;
public string MyType
{
get { return myType ?? (myType = GetMyType()); }
}
我正在尝试对枚举做同样的事情——我本以为模式是这样的:
MyEnum? myEnum;
public MyEnum MyEnum
{
get { return myEnum ?? (myEnum = GetMyEnum()); }
}
但是,我收到一条错误消息,指出我无法明确进行此转换 - 有人知道我如何绕过它吗?
(myEnum = GetMyEnum())
赋值的结果是MyEnum?
,因为myEnum
是MyEnum?
;所以你需要在 (...)
.
之后添加 .Value
或 .GetValueOrDefault()
这有效,例如:
public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()).GetValueOrDefault();
一样:
public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()) ?? 0;
或在 C# 7.1 中:
public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()) ?? default;
当我在 class 中有一个可选的 属性 可以为 null 时,我使用以下模式来延迟它。我还使用整数等值类型的变体。
string myType;
public string MyType
{
get { return myType ?? (myType = GetMyType()); }
}
我正在尝试对枚举做同样的事情——我本以为模式是这样的:
MyEnum? myEnum;
public MyEnum MyEnum
{
get { return myEnum ?? (myEnum = GetMyEnum()); }
}
但是,我收到一条错误消息,指出我无法明确进行此转换 - 有人知道我如何绕过它吗?
(myEnum = GetMyEnum())
赋值的结果是MyEnum?
,因为myEnum
是MyEnum?
;所以你需要在 (...)
.
.Value
或 .GetValueOrDefault()
这有效,例如:
public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()).GetValueOrDefault();
一样:
public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()) ?? 0;
或在 C# 7.1 中:
public MyEnum MyEnum => myEnum ?? (myEnum = GetMyEnum()) ?? default;