我正在尝试转换可空布尔值,但出现了这个错误。
Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
例如:
public virtual bool? MyBool
{
get;
set;
}
if (!MyBool){}
我正在尝试转换可空布尔值,但出现了这个错误。
Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
例如:
public virtual bool? MyBool
{
get;
set;
}
if (!MyBool){}
正如错误所述,在条件语句中你不能使用 bool?
类型。(如果它的值是 null
会发生什么?)
相反,你可以写成 if (MyBool != true)
或者 if (MyBool == false)
,具体取决于你是否想要包含 null
。(你需要添加一条注释来解释这一点)
MyBool ?? false
,尽管我通常更喜欢使用MyBool.GetValueOrDefault()
。 - Anthony Pegram你需要使用MyBool.Value
例如:
if (!MyBool.Value) { }
不过,你需要测试它是否确实有一个初始值。这个测试可以证明MyBool有一个值,并且该值为false。
if (MyBool.HasValue && !MyBool.Value) { }
if (!MyBool.HasValue || !MyBool.Value) { }
这个问题实际上归结为你是否真的想要一个可空的布尔变量,如果是,你想如何处理 null, true 或 false
这三种可能的情况。
您需要检查它是否有值。如果MyBool == null
,您想要做什么?
if( MyBool.HasValue && !MyBool.Value ) // MyBool is false
if( MyBool.HasValue && MyBool.Value ) // MyBool is true
if( !MyBool.HasValue ) // MyBool is null