Как я могу вернуть значение 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?
Итак, как мне это сделать?
Ответы
Ответ 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)
}