转换可空的布尔?布尔

时间:2011-05-20 17:45:04

标签: c# nullable

如何在C#中将可空bool?转换为bool

我已尝试x.Valuex.HasValue ...

11 个答案:

答案 0 :(得分:146)

你最终必须决定null bool代表什么。如果null应为false,则可以执行此操作:

bool newBool = x.HasValue ? x.Value : false;

或者:

bool newBool = x.HasValue && x.Value;

或者:

bool newBool = x ?? false;

答案 1 :(得分:95)

您可以使用null-coalescing operatorx ?? something,其中something是您希望在xnull时使用的布尔值。

示例:

bool? myBool = null;
bool newBool = myBool ?? false;

newBool将是假的。

答案 2 :(得分:77)

您可以使用Nullable{T} GetValueOrDefault()方法。如果为null,则返回false。

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();

答案 3 :(得分:5)

最简单的方法是使用空合并运算符:??

bool? x = ...;
if (x ?? true) { 

}

具有可空值的??通过检查提供的可空表达式来工作。如果可以为空的表达式有一个值,那么它的值将被使用,否则它将使用??右侧的表达式

答案 4 :(得分:4)

如果您要在bool?语句中使用if,我发现最简单的方法是与truefalse进行比较。< / p>

bool? b = ...;

if (b == true) { Debug.WriteLine("true"; }
if (b == false) { Debug.WriteLine("false"; }
if (b != true) { Debug.WriteLine("false or null"; }
if (b != false) { Debug.WriteLine("true or null"; }

当然,您也可以与null进行比较。

bool? b = ...;

if (b == null) { Debug.WriteLine("null"; }
if (b != null) { Debug.WriteLine("true or false"; }
if (b.HasValue) { Debug.WriteLine("true or false"; }
//HasValue and != null will ALWAYS return the same value, so use whatever you like.

如果您要将其转换为bool以传递给应用程序的其他部分,那么Null Coalesce运算符就是您想要的。

bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false

如果您已经检查过null,并且只想要该值,则访问Value属性。

bool? b = ...;
if(b == null)
    throw new ArgumentNullException();
else
    SomeFunc(b.Value);

答案 5 :(得分:2)

类似的东西:

if (bn.HasValue)
{
  b = bn.Value
}

答案 6 :(得分:2)

完整的方式是:

bool b1;
bool? b2 = ???;
if (b2.HasValue)
   b1 = b2.Value;

或者您可以使用

测试特定值
bool b3 = (b2 == true); // b2 is true, not false or null

答案 7 :(得分:2)

bool? a = null;
bool b = Convert.toBoolean(a); 

答案 8 :(得分:2)

这个答案适用于您只想在条件下测试bool?的用例。它也可以用于获得正常的bool。我可以选择比coalescing operator ??更容易阅读。

如果您想测试条件,可以使用此

bool? nullableBool = someFunction();
if(nullableBool == true)
{
    //Do stuff
}

只有当bool?为真时,上述if才会成立。

您还可以使用此功能从bool

分配常规bool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;

女巫与

相同
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;

答案 9 :(得分:0)

这是主题的有趣变体。在第一眼和第二眼,你会假设真正的分支被采取。不是这样!

bool? flag = null;
if (!flag ?? true)
{
    // false branch
}
else
{
    // true branch
}

获得你想要的东西是这样做的:

if (!(flag ?? true))
{
    // false branch
}
else
{
    // true branch
}

答案 10 :(得分:-1)

System.Convert对我来说很好用。

using System; ... Bool fixed = Convert.ToBoolean(NullableBool);