我刚刚在同事代码中遇到过这个问题.他有一个可以考虑的bool类型,他比较如下:
//foo has no value here and evaluated to false
if(foo==true)
{
    doSomething();
}
通常,我检查可以为空的布尔值的方式是这样的:
bool IsTrue(bool? value)
{
   return value.HasValue && value.Value;
}
if(IsTrue(foo)){
   doSomething()
}
编辑:我运行了两种方法,它们看起来都是一样的.我问的是哪一个是正确的方法,如果需要额外的检查?
现在我正在质疑我自己和我的同事代码.我在这里做这个额外的检查有什么意义吗?或者我可以安全地做第一种方式吗?
谢谢(是的,我确实搜索了这个!:))
其实我不建议你来治疗null的false.使用非可空布尔值,或显式处理null值.还有一个选择:
if (foo ?? false)
{
}
我会用这个.
bool IsTrue(bool? value)
{
   return value.GetValueOrDefault();
}
这将返回false时null或false和true,只有当它有一个值和true.
注意:您不能使用bool?in if statement,as if语句requires可隐式转换为的任何内容Boolean.其中as bool?不可转换为boolean,因此编译器会抱怨.