【发布时间】:2013-11-25 15:50:19
【问题描述】:
我刚刚在同事代码中遇到了这个问题。他有一个可以为空的 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()
}
编辑:我运行了这两种方法,它们看起来都以相同的方式工作。我在问哪种方法是正确的,是否需要额外的检查??
现在我在质疑自己和同事的代码。我在这里做这个额外的检查有什么意义吗?或者我可以通过第一种方式安全地做到这一点吗?
谢谢(是的,我确实搜索过这个!:))
【问题讨论】:
-
为什么不自己尝试一下呢?在单元测试或例如 LINQPad 中。
-
@Honza 我知道这两种说法都有效。我在问哪一个是正确的使用
-
公平地说,我会质疑是否需要一个可为空的布尔值。大多数情况下,事情要么是真要么是假,它不是“中间”或“半真半假”。
-
对我来说,
if(foo)不起作用。编译器说:“不能隐式转换类型'bool?'到 'bool'。存在显式转换(您是否缺少演员表?)" -
@Arran 通常情况下,某些东西可以是
true、false或unknown。