Как я могу вернуть значение bool из множества обнуляемых bools? - программирование

Как я могу вернуть значение bool из множества обнуляемых bools?

С помощью этого кода:

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

... Я остановился на своем пути с помощью

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

Итак, как мне это сделать?

4b9b3361

Ответ 1

Вы можете связать цепочку | s с помощью оператора нулевой коалесценции в конце:

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

Поднятый оператор | возвращает true, если любой операнд true, false, если оба операнда false и null, если один из операндов null, а другой не true.

Это не короткое замыкание, но я не думаю, что это будет проблемой для вас в этом случае.

Альтернативно - и более растяжимо - поставьте флажки в какую-то коллекцию. Тогда вы можете просто использовать:

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

Ответ 2

Try:

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

Ответ 3

Я предполагаю, что если значение null, то оно будет ложным, вы можете использовать Оператор.

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

Ответ 4

Вы можете использовать GetValueOrDefault() для получения значения или false.

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

Ответ 5

Вы можете использовать следующее:

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

Ответ 6

Использовать оператор ?? внутри вашего метода;

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