检查可为空的布尔值是不是为空[重复]

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&lt;bool&gt;

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?

可空布尔作为 C# 中的三态变量

.NET Dapper 可为空的强制转换错误

如何在 javascript 中检查此布尔哈希图是不是为空? [复制]

可为空的对象必须具有一个值

可为空的对象必须具有一个值 是啥原因啊 求解 谢谢