检查可空布尔值是否为空或非空。

19

可能重复:
Nullable<>.HasValue 和 Nullable<> == null,哪个更好?

我知道类似的问题已经被问了很多次。但我从来没有找到一个答案来检查可空布尔值是否为 null。 这里是我对此的回答:

bool? nullableBool;
if (nullableBool == true){

}else if (nullableBool == false){

}else{

}

但我在想,是否有更好、更直接的方法来最小化无用代码呢?谢谢。


4
那不是可空布尔值,而是一个尚未被赋值的布尔值。 - musefan
1
@Paolo 这样编辑帖子并没有帮助,反而使所有正确告诉 OP 他做错了的答案无效,并且仍然没有使代码正确。 - Rawling
1
@musefan(和Rawling):这只是一个小错误或打字错误,从问题的其余部分可以清楚地看出,这不是“搞砸”或“做出假设”。由于我们是人,而不是编译器,一点宽容也不会有坏处 :) - Paolo Tedesco
2
@PaoloTedesco:事实证明这只是一个打字错误,但这并不能为你做出假设辩护。当一个新用户在这个网站上使用“nullable”这个词时,我们无法确定他们是否真正知道什么是可空类型……我们甚至不知道他们是否认为在变量名前加上“nullable”就可以完成任务,世界上有很多这样的人。关键是,你正在做出假设,并且在不确定OP的意思的情况下改变问题。 - musefan
1
是的,我知道我说的不仅完全合理,而且正确 ;) - Paolo Tedesco
显示剩余2条评论
4个回答

30
if (!nullableBool.HasValue)
{
    // null
}

你也可以直接将它与null进行比较。


无法与 OP 的代码一起使用。 - musefan
4
公平地说,这是OP代码的问题... - Marc Gravell
@MarcGravell: 可能是这样,但无论如何,这个答案仍然不起作用。 - musefan
@MarcGravell:因为在编辑之前,OP使用的是bool而不是bool?,而且这个问题(在编辑之前)没有提到使用可空类型,就编译而言,那根本行不通。 - musefan
3
即使在编辑之前,这一点已经非常明显了,他们的意图是清楚的。编辑只是证实了这一点。 - Marc Gravell
2
@Marc,OP正在问一个简单的问题(对你和我来说很简单),如何检查可空布尔值是否为空。任何真正了解如何使用可空数据类型的人都应该知道如何检查null...所以如果这个OP不知道如何检查,为什么要假设他甚至知道如何正确声明一个...你只是认为你是对的,因为事实证明确实如此。如果OP接受了我的答案并说“谢谢,结果我声明错了”,那么你就不会那么热衷于说明你的假设显然是错误的。 - musefan

11

那不是可空的 bool,它是未分配的 bool,你的代码会编译不通过。你需要使用 bool?Nullable<bool>

bool? nullableBool = null; // or = true or = false
if (nullableBool.HasValue)
{
    if (nullableBool.Value)
        // true
    else
       // false
}
else
    // null

4

首先,您使用的布尔值是不可空的。要创建可空布尔值,可以执行以下操作之一:

Nullable<bool> nullableBool;

或者简写版本:
bool? nullableBool;

可以使用以下方法检查任何一个值是否有值:

if(nullableBool.HasValue)
{
   //nullableBool has been assigned a value
}

您当前的方法并不被推荐。如果需要可空状态,请使用可空布尔类型。如果要使用标准布尔类型,则确保给它赋一个值。我很惊讶您在Visual Studio中没有收到编译错误。


0
请尝试这个:
if (!nullableBool.HasValue)
{
    // your code
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接