С#: Неявное преобразование между '<null>' и 'bool'
У меня появилось странное сообщение об ошибке, когда я попытался преобразовать object
в bool
, вот мой код:
public partial class ModifierAuteur : DevExpress.XtraEditors.XtraForm
{
public ModifierAuteur(object getKeyDecesCheckBox)
{
decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool)getKeyDecesCheckBox;
}
}
и это сообщение об ошибке:
Тип условного выражения не может быть определен, потому что существует нет неявного преобразования между <null>
и bool
Ответы
Ответ 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.