14

使用此代码:

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

...我在我的轨道上停下来

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

那么我该如何实现呢?

4

6 回答 6

31

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

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

如果任一操作数是,如果两个操作数都是,并且如果任一操作数是而另一个不是,则提升的|运算符返回。truetruefalsefalsenullnulltrue

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

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

return checkboxes.Any(cb => cb.IsChecked ?? false);
于 2012-12-18T21:58:30.770 回答
11

尝试:

return ((ckbx1.IsChecked ?? false) ||
        (ckbx2.IsChecked ?? false) ||
        ...
于 2012-12-18T21:58:15.107 回答
6

我假设如果为空,那么它将是错误的,您可以使用 ?? 操作员。

 private bool AtLeastOnePlatypusChecked()
 {
      return ((ckbx1.IsChecked ?? false) ||
      (ckbx2.IsChecked ?? false) ||
      (ckbx3.IsChecked ?? false) ||
      (ckbx4.IsChecked ?? false));
 }
于 2012-12-18T22:01:10.200 回答
5

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

private bool AtLeastOnePlatypusChecked()
{
    return ((ckbx1.IsChecked.GetValueOrDefault()) ||
            (ckbx2.IsChecked.GetValueOrDefault()) ||
            (ckbx3.IsChecked.GetValueOrDefault()) ||
            (ckbx4.IsChecked.GetValueOrDefault()));
}
于 2012-12-18T22:03:45.003 回答
4

您可以使用以下内容:

(ckbx1.IsChecked.HasValue && ckbx1.IsChecked.Value)
于 2012-12-18T21:58:13.943 回答
2

在方法中使用??运算符;

private bool AtLeastOnePlatypusChecked()
{
return ((ckbx1.IsChecked ?? false) ||
        (ckbx2.IsChecked ?? false) ||
        (ckbx3.IsChecked ?? false) ||
        (ckbx4.IsChecked ?? false)
}
于 2012-12-18T22:03:18.013 回答