可空枚举的延迟 属性

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?,因为myEnumMyEnum?;所以你需要在 (...).

之后添加 .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;