当我在一个可以为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;