繁体   English   中英

转换可空<bool>布尔

[英]Converting Nullable<bool> to bool

我收到此编译器错误:

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

对于以下代码:

 xEnable = was.xEnable;

xEnable是 DB 中的可空列。

这意味着

xEnable is of type bool 

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

做类似的事情

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

其中false是默认值,如果was.xEnable == null

编辑或者如果你真的想要你可以使用?? 操作员喜欢

xEnable = was.xEnable ?? true;

要么

xEnable = was.xEnable ?? false;

实际使用?? 就像你的标题一样,去

xEnable = was.xEnable ?? false;

如果您希望xEnablefalse如果was.xEnablenull ,或

xEnable = was.xEnable ?? true;

如果您希望xEnabletrue如果was.xEnablenull

对于 C# 8.0 及更高版本,您可以使用?? 操作员,正如你所问的,做

xEnable = was.xEnable ?? false;

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

如果您知道was.xEnable不为 null,则可以使用

xEnable = was.xEnable.Value

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

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

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

xEnable = was.xEnable.HasValue ? was.xEnable.Value : DBNull.Value;
bool a = false; 
bool? b = null; 
a = (bool)b;

这将在bnull情况下引发异常。

所以可能的解决方案是:

  • 你知道b永远不会为null ,所以使用这个模式(坏)
  • 通过bool? a = false也可以abool? a = false bool? a = false ;
  • 检查b nulla = (b == null)?false:b.Value;

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM