将Nullable <bool>转换为bool </bool>

时间:2012-11-27 13:56:41

标签: c# c#-4.0

我有一个例外:

  

无法隐式转换类型'bool?' 'bool'。一个明确的   转换存在(您是否错过了演员?)。

代码:

 xEnable = was.xEnable;

xEnable是DB中可以为空的列。

6 个答案:

答案 0 :(得分:13)

这意味着

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;

答案 1 :(得分:3)

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

xEnable = was.xEnable ?? false;

如果xEnable falsewas.xEnable,或者

,则nullxEnable = was.xEnable ?? true;
xEnable

如果true was.xEnablenull,则{{1}}为{{1}}。

答案 2 :(得分:1)

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

xEnable = was.xEnable.Value

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

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

答案 3 :(得分:1)

你可以用??运营商,正如您所问,并且

xEnable = was.xEnable ?? false;

如果您想在was.xEnable为空时将false设为默认值。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

bool a = false; 
bool? b = null; 
a = (bool)b;

如果bnull,则会引发异常。

所以可能的解决方案可能是:

  • 您知道b 从不 null,所以请使用此模式(错误)
  • a;
  • 使bool? a = false也可以为空
  • nullb
  • 上查看a = (b == null)?false:b.Value;

希望这有帮助。