【发布时间】:2019-06-11 01:46:03
【问题描述】:
如何在 C# 中将可空的 bool? 转换为 bool?
我尝试过x.Value 或x.HasValue ...
【问题讨论】:
如何在 C# 中将可空的 bool? 转换为 bool?
我尝试过x.Value 或x.HasValue ...
【问题讨论】:
您最终必须决定 null bool 将代表什么。如果null 应该是false,你可以这样做:
bool newBool = x.HasValue ? x.Value : false;
或者:
bool newBool = x.HasValue && x.Value;
或者:
bool newBool = x ?? false;
【讨论】:
VB.NET 中的情况如何:dim newBool as Boolean = CBool(x)? null会被转换成false还是会抛出异常?
Linq 声明“Where”子句,我不明白为什么 lifted operators 在 Linq 中似乎不起作用(也许它只是 VB.NET?) - 我刚刚测试过,它确实抛出了一个无效的强制转换异常
您可以使用null-coalescing operator:x ?? something,其中something 是一个布尔值,如果x 是null,您要使用它。
例子:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool 将是假的。
【讨论】:
bool? myBool = null; bool newBool = myBool ?? false;
您可以使用Nullable{T} GetValueOrDefault() 方法。如果为 null,这将返回 false。
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
【讨论】:
if (nullableBool.GetValueOrDefault())
如果您要在if 语句中使用bool?,我发现最简单的做法是与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? x = ...;
if (x ?? true) {
}
具有可空值的?? 通过检查提供的可空表达式来工作。如果可为空的表达式有一个值,则将使用它的值,否则它将使用??右侧的表达式
【讨论】:
此答案适用于您只想在条件下测试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;
【讨论】:
bool? a = null;
bool b = Convert.toBoolean(a);
【讨论】:
完整的方法是:
bool b1;
bool? b2 = ???;
if (b2.HasValue)
b1 = b2.Value;
或者您可以使用
测试特定值bool b3 = (b2 == true); // b2 is true, not false or null
【讨论】:
类似:
if (bn.HasValue)
{
b = bn.Value
}
【讨论】:
这是一个有趣的主题变体。乍一看,你会假设真正的分支被拿走了。不是这样!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
得到你想要的东西的方法是这样做:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
【讨论】: