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

|最後に null 合体演算子を使用して、sを連鎖させることができます。

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

null の場合は false になり、?? を使用できると想定しています。オペレーター。

 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 に答える