如何在C#中将可空bool?
转换为bool
?
我已尝试x.Value
或x.HasValue
...
答案 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 operator:x ?? something
,其中something
是您希望在x
为null
时使用的布尔值。
示例:
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
,我发现最简单的方法是与true
或false
进行比较。< / 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);