C #: неявное преобразование между «<null>» и «bool»

Я получил странное сообщение об ошибке при попытке преобразоватьobject вboolвот мой код:

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

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

Type of conditional expression cannot be determined because there is no implicit conversion between <null> and bool

Ответы на вопрос(4)

Решение Вопроса

что назначение возможно, вам нужно преобразовать в обнуляемыйbool, как это:

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

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

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

 decesCheckBox.Checked = getKeyDecesCheckBox == null ? false : (bool)getKeyDecesCheckBox;
 user172665507 окт. 2012 г., 14:30
Спасибо сработало
 07 окт. 2012 г., 14:24
@ user1726655 Ах, но тогда ваша левая сторона не позволяетnulls, вам нужно изменитьnull заfalse (или жеtrue если отправкаnull означает, что пункт должен быть проверен, хотя я сомневаюсь в этом). Я внес изменения в ответ, пожалуйста, посмотрите.
 user172665507 окт. 2012 г., 14:21
Я боюсь сказать, что это не сработало, это сообщение об ошибке:Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)

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

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

Если для этого требуется bool (не обнуляемый), вы можете легко преобразовать ноль в false с помощью:

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

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

 17 дек. 2015 г., 06:58
Для тех, кто отрицал, пожалуйста, смотрите комментарии к принятому ответу

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

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

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

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

?? Оператор присваивает значение «ложь» в случае, когда объект является нулевым или не может быть преобразован в bool.

 27 янв. 2015 г., 14:56
Это не сработает.as оператор не может быть использован с типом конструкции, иbool является.

Ваш ответ на вопрос