不能隐式转换类型bool?

use*_*007 24 c# nullable

我试图转换我的可空bool值,我收到此错误.

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)

例如:

public virtual bool? MyBool
  {
    get;
    set;
  }

if (!MyBool){}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 30

如错误所述,您不能bool?在条件中使用a .(如果是这样会发生什么null?)

相反,您可以写if (MyBool != true)if (MyBool == false),取决于您是否要包括null.(你应该添加一条评论来解释)

  • 另一个有效的检查是`MyBool ?? false`,虽然我通常更喜欢`MyBool.GetValueOrDefault()`. (5认同)

Not*_*tMe 9

你必须使用MyBool.Value

例如:

if (!MyBool.Value) { }
Run Code Online (Sandbox Code Playgroud)

但是,您应该测试它确实具有开始的值.这测试MyBool有一个值,它是错误的.

if (MyBool.HasValue && !MyBool.Value) { }
Run Code Online (Sandbox Code Playgroud)

或者你可能真的想要运行代码块的以下内容,如果它没有被分配或者是假的.

if (!MyBool.HasValue || !MyBool.Value) { }
Run Code Online (Sandbox Code Playgroud)

问题实际上归结为你是否真的打算拥有一个可以为空的布尔变量,如果是的话,你想如何处理3个可能的条件null, true or false.