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

10-06 14:00
查看更多