不能隐式转换类型bool?

时间:2012-02-01 01:31:08

标签: c# nullable

我正在尝试转换我的可空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){}

3 个答案:

答案 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