0

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

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

对于以下代码:

 xEnable = was.xEnable;

xEnable是 DB 中的一个可为空的列。

4

6 回答 6

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;
于 2012-11-27T13:59:08.107 回答
4

要实际使用??你的标题,去

xEnable = was.xEnable ?? false;

如果你想xEnable成为falseif was.xEnableis null,或者

xEnable = was.xEnable ?? true;

如果你想xEnable成为true如果was.xEnablenull

于 2012-11-27T14:01:34.523 回答
2

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

xEnable = was.xEnable ?? false;

如果你想false成为默认值 when was.xEnableis null

于 2012-11-27T14:01:54.913 回答
1

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

xEnable = was.xEnable.Value

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

bool defaultValue = false;
xEnable = was.xEnable ?? defaultValue;
于 2012-11-27T13:59:35.520 回答
0

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

xEnable = was.xEnable.HasValue ? was.xEnable.Value : DBNull.Value;
于 2012-11-27T14:02:57.257 回答
0
bool a = false; 
bool? b = null; 
a = (bool)b;

b如果is ,这将引发异常null

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

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

希望这可以帮助。

于 2012-11-27T14:03:17.360 回答