如何从大量可为空的布尔值中返回布尔值?
Posted
技术标签:
【中文标题】如何从大量可为空的布尔值中返回布尔值?【英文标题】:How can I return a bool value from a plethora of nullable bools? 【发布时间】:2012-12-06 04:48:32 【问题描述】:使用此代码:
private bool AtLeastOnePlatypusChecked()
return ((ckbx1.IsChecked) ||
(ckbx2.IsChecked) ||
(ckbx3.IsChecked) ||
(ckbx4.IsChecked));
...我被
拦住了Operator '||' cannot be applied to operands of type 'bool?' and 'bool?
那么我该如何实现呢?
【问题讨论】:
merriam-webster.com/dictionary/plethora 【参考方案1】:您可以使用以下内容:
(ckbx1.IsChecked.HasValue && ckbx1.IsChecked.Value)
【讨论】:
||
应该是&&
运算符吗?如果cbx1.IsChecked.HasValue
是false
,那么在获取ckbx1.IsChecked.Value
时会有一个Null Reference
。【参考方案2】:
试试:
return ((ckbx1.IsChecked ?? false) ||
(ckbx2.IsChecked ?? false) ||
...
【讨论】:
【参考方案3】:您可以将|
s 链接在一起,最后使用空合并运算符:
return (ckbx1.IsChecked | cxbx2.IsChecked | cxbx3.IsChecked | cxbx4.IsChecked) ?? false;
如果任一操作数为true
,提升的|
运算符返回true
,如果两个操作数均为false
,则返回false
,如果任一操作数为null
而另一个不是@,则返回null
987654333@.
这不是短路,但我认为在这种情况下这对你来说不是问题。
或者,更可扩展地,将复选框放入某种集合中。然后你可以使用:
return checkboxes.Any(cb => cb.IsChecked ?? false);
【讨论】:
我终于知道“提升”是什么意思了。我在使用表达式树时遇到了这个术语。 我也对这个词很好奇,但它看起来像Jon has already answered that question 我相信 |操作数不使用短路评估,因此可能会对性能产生轻微影响,在本示例中可能可以忽略不计。 @OlivierJacot-Descombes:有关详细讨论,请参阅 blogs.msdn.com/b/ericlippert/archive/2007/06/27/…。此外,如果您对这个主题感兴趣,我将在本月晚些时候在我的新博客(ericlippert.com)中回到这个主题。 @JeppeStigNielsen:我在离开之前修复了 Roslyn 中的那个错误。我不再是“那些家伙”中的一员了。 :-)【参考方案4】:我假设如果为 null,那么它将为 false,您可以使用 ??运算符。
private bool AtLeastOnePlatypusChecked()
return ((ckbx1.IsChecked ?? false) ||
(ckbx2.IsChecked ?? false) ||
(ckbx3.IsChecked ?? false) ||
(ckbx4.IsChecked ?? false));
【讨论】:
【参考方案5】:在您的方法中使用??
运算符;
private bool AtLeastOnePlatypusChecked()
return ((ckbx1.IsChecked ?? false) ||
(ckbx2.IsChecked ?? false) ||
(ckbx3.IsChecked ?? false) ||
(ckbx4.IsChecked ?? false)
【讨论】:
【参考方案6】:您可以使用GetValueOrDefault()
获取值或false
。
private bool AtLeastOnePlatypusChecked()
return ((ckbx1.IsChecked.GetValueOrDefault()) ||
(ckbx2.IsChecked.GetValueOrDefault()) ||
(ckbx3.IsChecked.GetValueOrDefault()) ||
(ckbx4.IsChecked.GetValueOrDefault()));
【讨论】:
以上是关于如何从大量可为空的布尔值中返回布尔值?的主要内容,如果未能解决你的问题,请参考以下文章