如何从过多的可空博尔中返回一个bool值?

时间:2012-12-18 21:56:33

标签: c# boolean nullable

使用此代码:

private bool AtLeastOnePlatypusChecked()
{
    return ((ckbx1.IsChecked) ||
            (ckbx2.IsChecked) ||
            (ckbx3.IsChecked) ||
            (ckbx4.IsChecked));
}

......我已经停止了

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?

那我该怎么做呢?

5 个答案:

答案 0 :(得分:31)

您可以使用最后的null-coalescing运算符将|链接在一起:

return (ckbx1.IsChecked | cxbx2.IsChecked | cxbx3.IsChecked | cxbx4.IsChecked) ?? false;

如果两个操作数均为|,则true运算符返回truefalse如果两个操作数均为false,则返回null操作数为null,另一个不是true

这不是短路,但我不认为在这种情况下对你来说会有问题。

或者 - 更可扩展 - 将复选框放入某种集合中。然后你可以使用:

return checkboxes.Any(cb => cb.IsChecked ?? false);

答案 1 :(得分:11)

尝试:

return ((ckbx1.IsChecked ?? false) ||
        (ckbx2.IsChecked ?? false) ||
        ...

答案 2 :(得分:6)

我假设如果为null,那么它将是假的,你可以使用??操作

 private bool AtLeastOnePlatypusChecked()
 {
      return ((ckbx1.IsChecked ?? false) ||
      (ckbx2.IsChecked ?? false) ||
      (ckbx3.IsChecked ?? false) ||
      (ckbx4.IsChecked ?? false));
 }

答案 3 :(得分:5)

您可以使用GetValueOrDefault()获取值,或false

private bool AtLeastOnePlatypusChecked()
{
    return ((ckbx1.IsChecked.GetValueOrDefault()) ||
            (ckbx2.IsChecked.GetValueOrDefault()) ||
            (ckbx3.IsChecked.GetValueOrDefault()) ||
            (ckbx4.IsChecked.GetValueOrDefault()));
}

答案 4 :(得分:4)

您可以使用以下内容:

(ckbx1.IsChecked.HasValue && ckbx1.IsChecked.Value)