if()语句中可以为空的bool - 需要检查吗?

dfe*_*aro 5 c# nullable

我刚刚在同事代码中遇到过这个问题.他有一个可以考虑的bool类型,他比较如下:

//foo has no value here and evaluated to false
if(foo==true)
{
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

通常,我检查可以为空的布尔值的方式是这样的:

bool IsTrue(bool? value)
{
   return value.HasValue && value.Value;
}

if(IsTrue(foo)){
   doSomething()
}
Run Code Online (Sandbox Code Playgroud)

编辑:我运行了两种方法,它们看起来都是一样的.我问的是哪一个是正确的方法,如果需要额外的检查?

现在我正在质疑我自己和我的同事代码.我在这里做这个额外的检查有什么意义吗?或者我可以安全地做第一种方式吗?

谢谢(是的,我确实搜索了这个!:))

Ser*_*kiy 9

其实我不建议你来治疗nullfalse.使用非可空布尔值,或显式处理null值.还有一个选择:

if (foo ?? false)
{

}
Run Code Online (Sandbox Code Playgroud)


Sri*_*vel 7

我会用这个.

bool IsTrue(bool? value)
{
   return value.GetValueOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

这将返回false时nullfalsetrue,只有当它有一个值和true.

注意:您不能使用bool?in if statement,as if语句requires可隐式转换为的任何内容Boolean.其中as bool?不可转换为boolean,因此编译器会抱怨.