c# - 可空枚举的延迟属性

标签 c# enums nullable

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

关于c# - 可空枚举的延迟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47554052/

相关文章:

c# - Resharper 为 ReactiveUI 的 ReactiveObject 创建自定义重构

Java枚举反向查找最佳实践

c# - 可空值还是默认值?

c# - 正确识别具有相同基础值的枚举

R 与 match.arg 类似的枚举参数 : How to choose a non-first element as default value?

c# - 可为空的 DateTime 扩展引发 'does not contain a definition' 异常

c# - 从值中减去可为 null 的十进制 null

c# - 显示来自 ModelState.Values 的错误

c# - 在 Windows 操作系统中安装软件/应用程序时会发生什么?

c# - Stripe 401 - 未提供有效的 API key - C#