当我在类中有一个可以为 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;
关于c# - 可空枚举的延迟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47554052/