我正在尝试转换我的可空bool值,我收到此错误。
Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
例如:
public virtual bool? MyBool
{
get;
set;
}
if (!MyBool){}
答案 0 :(得分:30)
如错误所述,您不能在条件中使用bool?
。 (如果它是null
会发生什么?)
相反,您可以写if (MyBool != true)
或if (MyBool == false)
,具体取决于您是否要包含null
。 (你应该添加一条评论说明)
答案 1 :(得分:9)
您必须使用MyBool.Value
例如:
if (!MyBool.Value) { }
但是,您应该测试它确实具有值开头的值。这测试MyBool有一个值,它是错误的。
if (MyBool.HasValue && !MyBool.Value) { }
或者您可能真的想要运行代码块的以下内容(如果它尚未分配或者为false)。
if (!MyBool.HasValue || !MyBool.Value) { }
问题实际上归结为你是否真的打算拥有一个可以为空的布尔变量,如果是,你想如何处理null, true or false
的3种可能条件。
答案 2 :(得分:2)
您需要检查它是否有值。如果MyBool == null
?
if( MyBool.HasValue && !MyBool.Value ) // MyBool is false
if( MyBool.HasValue && MyBool.Value ) // MyBool is true
if( !MyBool.HasValue ) // MyBool is null