【发布时间】:2012-11-27 13:56:40
【问题描述】:
我得到了这个编译器错误:
不能隐式转换类型'bool?' '布尔'。显式 存在转换(您是否缺少演员表?)。
以下代码:
xEnable = was.xEnable;
xEnable 是 DB 中可以为空的列。
【问题讨论】:
-
那 ??操作员 ?您在问题中没有提及任何有关它的内容。
我得到了这个编译器错误:
不能隐式转换类型'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;
如果您希望 xEnable 成为 false 如果 was.xEnable 是 null,或者
xEnable = was.xEnable ?? true;
如果您希望 xEnable 成为 true 如果 was.xEnable 是 null。
【讨论】:
对于 C# 8.0 及更高版本,您可以按照您的要求使用 ?? 运算符,然后执行
xEnable = was.xEnable ?? false;
当was.xEnable 为null 时,如果您希望false 成为默认值。
【讨论】:
如果知道was.xEnable不为空,可以使用
xEnable = was.xEnable.Value
如果您想在was.xEnable 为null 时使用默认值,您可以执行以下操作
bool defaultValue = false;
xEnable = was.xEnable ?? defaultValue;
【讨论】:
GetValueOrDefault 可能是您通常想要使用的,但问题是关于 ??运算符,这就是我使用的。
您是否尝试将空值实际传递给数据库?如果是这样:
xEnable = was.xEnable.HasValue ? was.xEnable.Value : DBNull.Value;
【讨论】:
bool a = false;
bool? b = null;
a = (bool)b;
如果b 是null,这将引发异常。
所以可能的解决方案是:
b是从不null,所以使用这种模式(不好)a 也可以为空,bool? a = false;b、a = (b == null)?false:b.Value; 上检查null
希望这会有所帮助。
【讨论】:
a = b.HasValue && b.Value