Подтвердить что ты не робот

С#: Неявное преобразование между '<null>' и 'bool'

У меня появилось странное сообщение об ошибке, когда я попытался преобразовать object в bool, вот мой код:

public partial class ModifierAuteur : DevExpress.XtraEditors.XtraForm
{
    public ModifierAuteur(object getKeyDecesCheckBox)
    {
         decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool)getKeyDecesCheckBox;
    }
}

и это сообщение об ошибке:

Тип условного выражения не может быть определен, потому что существует нет неявного преобразования между <null> и bool

4b9b3361

Ответ 1

Предполагая, что назначение возможно, вам нужно преобразовать в значение с нулевым значением bool, например:

decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool?)((bool)getKeyDecesCheckBox);

Внутренний листинг до bool отменяет значение, а внешний прилив на bool? делает его совместимым с null условного выражения.

Если левая часть присваивания не позволяет null s, вам нужно определить значение, которое устанавливается, когда getKeyDecesCheckBox равно null. Обычно, a false:

 decesCheckBox.Checked = getKeyDecesCheckBox == null ? false : (bool)getKeyDecesCheckBox;

Ответ 2

Предполагая, что свойство Checked имеет тип nullable bool, я бы, вероятно, сделал следующее:

decesCheckBox.Checked = (getKeyDecesCheckBox == null ? (bool?)null : (bool?)getKeyDecesCheckBox);

Если требуется bool (не-nullable), вы можете легко преобразовать значение null в false:

decesCheckBox.Checked = (getKeyDecesCheckBox == null ? (bool?)null : (bool?)getKeyDecesCheckBox).GetValueOrDefault();

Ответ 3

decesCheckBox.Checked имеет тип bool. Таким образом, вы должны подать его либо false, либо true.

Ответ 4

Твой?: 'имеет два возможных несовместимых типа возврата: если объект имеет значение null, он возвращает значение null, которое может быть присвоено любому типу NULL. Если объект не является нулевым, то его возвращаемым типом является bool.

Я не знаю, какой тип "Проверено", но я подозреваю, что его тип "bool".

Проблема заключается в том, что вы не можете применять null к типу "bool", поэтому вам нужно решить, какой тип вы хотите, чтобы объект был нулевым. Если вы хотите, чтобы он был ложным, вы можете написать оператор как:

decesCheckBox.Checked = (getKeyDecesCheckBox as bool) ?? false;

Оператор присваивает значение "false" в случае, когда объект имеет значение null или не может быть преобразован в bool.