检查可为空的布尔值是不是为空[重复]
Posted
技术标签:
【中文标题】检查可为空的布尔值是不是为空[重复]【英文标题】:checking if a nullable bool is null or not [duplicate]检查可为空的布尔值是否为空[重复] 【发布时间】:2012-10-29 13:44:15 【问题描述】:可能重复:Which is preferred: Nullable<>.HasValue or Nullable<> == null?
我知道这样的问题已经被问过很多次了。但是我从来没有找到如何检查可空布尔值是否为空的答案。 这是我对此的答案:
bool? nullableBool;
if (nullableBool == true)
else if (nullableBool == false)
else
但我想知道是否有更好、更直接的方法来减少无用的代码? 谢谢。
【问题讨论】:
这不是可以为空的布尔值。那是一个没有被赋值的布尔值 @Paolo 这样编辑帖子没有帮助;它使所有答案正确地告诉 OP 他做错了,它仍然没有使代码正确。 我回滚了编辑.. 不要做这样的假设,你把 OP 的问题搞砸了 @musefan(和 Rawling):这只是一个小错误或错字,从问题的其余部分非常清楚,这不是“搞砸”或“做出假设”。由于我们是人,而不是编译器,所以稍微宽容一点也不错:) @PaoloTedesco:事实证明这是一个错字,但这并不能成为你假设它的借口。当该站点的未知新用户使用“可空”这个词时,没有什么完全清楚的,他们实际上甚至知道可空类型到底是什么......据我们所知,他们可能认为在变量名称前加上“”可以为空”是什么工作,世界上有很多这样的人。关键是,您正在做出假设,并且您正在更改问题而不知道 OP 的含义 【参考方案1】:if (!nullableBool.HasValue)
// null
你也可以直接和null
比较。
【讨论】:
不能使用 OP 的代码 @musefan 公平地说,这是 OP 代码的错... @MarcGravell:也许,但无论哪种方式,这个答案仍然不起作用 @musefan 非常清楚,甚至在编辑之前,这就是他们的意图。编辑只是证实了这一点。 @Marc,OP 正在问一个简单的问题(对您和我来说都很简单)如何检查可为空的布尔值是否为空。任何真正知道如何使用可空数据类型的人都应该知道如何检查空值......所以如果这个 OP 不知道如何检查,为什么要假设他实际上甚至知道如何正确声明一个......你只是认为你的权利是显而易见的,因为它后来变成了这种情况。如果 OP 接受了我的回答并说“谢谢,事实证明我宣布这一切都是错误的”,那么你就不会那么热衷于说明你的假设有多么明显是错误的【参考方案2】:这不是可空的bool
,它是未分配的bool
,您的代码将无法编译。您需要使用bool?
或Nullable<bool>
。
bool? nullableBool = null; // or = true or = false
if (nullableBool.HasValue)
if (nullableBool.Value)
// true
else
// false
else
// null
【讨论】:
【参考方案3】:首先,您使用的 bool 不能为空。要创建可为空的 bool,您可以执行以下操作:
Nullable<bool> nullableBool;
或简写版本:
bool? nullableBool;
然后可以使用以下方法检查其中任何一个以查看其是否具有值:
if(nullableBool.HasValue)
//nullableBool has been assigned a value
不推荐您当前的方法。如果您需要可空状态,请使用可空布尔值。如果您想使用标准布尔值,请务必为其分配一个值。我很惊讶你没有在 Visual Studio 中使用该代码得到编译错误。
【讨论】:
【参考方案4】:请试试这个:
if (!nullableBool.HasValue)
// your code
【讨论】:
以上是关于检查可为空的布尔值是不是为空[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 CheckBox 绑定到可为空的布尔类型 DbColumn?