Answers:
您最终必须决定null bool将代表什么。如果null
应该false
,您可以这样做:
bool newBool = x.HasValue ? x.Value : false;
要么:
bool newBool = x.HasValue && x.Value;
要么:
bool newBool = x ?? false;
Linq
“哪里”子句,我不明白为什么lifted operators
在Linq中似乎不起作用(也许只是VB.NET?)-我刚刚进行了测试,它确实引发了无效的强制转换例外
您可以使用Nullable{T}
GetValueOrDefault()
方法。如果为null,则将返回false。
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
如果要bool?
在if
语句中使用,我发现最简单的方法是将true
或进行比较false
。
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.
如果要将其转换为布尔值以传递到应用程序的其他部分,则需要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);
当您只想测试bool?
条件时,此答案适用于用例。它也可以用来获得法线bool
。我个人认为这是一种比阅读更容易的选择coalescing operator ??
。
如果要测试条件,可以使用此
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
只有在true时,上述if才bool?
为true。
您也可以使用它bool
从bool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
女巫与
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
VB.NET
,如果你这样做:dim newBool as Boolean = CBool(x)
?将null
转换为false
还是将引发异常?