【问题标题】:Converting Nullable<bool> to bool将 Nullable<bool> 转换为 bool
【发布时间】:2012-11-27 13:56:40
【问题描述】:

我得到了这个编译器错误:

不能隐式转换类型'bool?' '布尔'。显式 存在转换(您是否缺少演员表?)。

以下代码:

 xEnable = was.xEnable;

xEnable 是 DB 中可以为空的列。

【问题讨论】:

标签: c# c#-4.0


【解决方案1】:

这意味着

xEnable is of type bool 

was.xEnable is of type bool? (ie: nullable bool)

做类似的事情

xEnable = was.xEnable.HasValue ? was.xEnable.Value : false;

其中 falsewas.xEnable == null

的默认值

编辑 或者,如果您真的想要,您可以使用 ?? 运算符,例如

xEnable = was.xEnable ?? true;

xEnable = was.xEnable ?? false;

【讨论】:

    【解决方案2】:

    要在标题中实际使用??,请转到

    xEnable = was.xEnable ?? false;
    

    如果您希望 xEnable 成为 false 如果 was.xEnablenull,或者

    xEnable = was.xEnable ?? true;
    

    如果您希望 xEnable 成为 true 如果 was.xEnablenull

    【讨论】:

      【解决方案3】:

      对于 C# 8.0 及更高版本,您可以按照您的要求使用 ?? 运算符,然后执行

      xEnable = was.xEnable ?? false;
      

      was.xEnablenull 时,如果您希望false 成为默认值。

      【讨论】:

        【解决方案4】:

        如果知道was.xEnable不为空,可以使用

        xEnable = was.xEnable.Value
        

        如果您想在was.xEnablenull 时使用默认值,您可以执行以下操作

        bool defaultValue = false;
        xEnable = was.xEnable ?? defaultValue;
        

        【讨论】:

        • 更好的方法是用户 GetValueOrDefault,除非您想要/需要另一个默认值而不是类型默认值。而且我不会依赖“知道数据不为空”,规格和数据会随着时间而改变。
        • 同意 - GetValueOrDefault 可能是您通常想要使用的,但问题是关于 ??运算符,这就是我使用的。
        【解决方案5】:

        您是否尝试将空值实际传递给数据库?如果是这样:

        xEnable = was.xEnable.HasValue ? was.xEnable.Value : DBNull.Value;
        

        【讨论】:

          【解决方案6】:
          bool a = false; 
          bool? b = null; 
          a = (bool)b;
          

          如果bnull,这将引发异常。

          所以可能的解决方案是:

          • 你知道b从不null,所以使用这种模式(不好)
          • a 也可以为空,bool? a = false;
          • ba = (b == null)?false:b.Value; 上检查null

          希望这会有所帮助。

          【讨论】:

          • a = b.HasValue &amp;&amp; b.Value
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-03
          • 2017-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多