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

Невозможно неявно преобразовать тип bool?

Я пытаюсь преобразовать свое значение nullool bool, и я получаю эту ошибку.

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)

Например:

public virtual bool? MyBool
  {
    get;
    set;
  }

if (!MyBool){}
4b9b3361

Ответ 1

Как говорится в ошибке, вы не можете использовать bool? в условном выражении. (Что произойдет, если оно null?)

Вместо этого вы можете написать if (MyBool != true) или if (MyBool == false), в зависимости от того, хотите ли вы включить null. (и вы должны добавить комментарий, объясняющий это)

Ответ 2

Вы должны использовать MyBool.Value

например:

if (!MyBool.Value) { }

Тем не менее, вы должны проверить, что он действительно имеет значение для начала. Это проверяет, что MyBool имеет значение, и оно ложно.

if (MyBool.HasValue && !MyBool.Value) { }

Или вы можете действительно хотеть следующее, которое запускает блок кода, если он либо не был назначен, либо имеет значение false.

if (!MyBool.HasValue || !MyBool.Value) { }

Вопрос действительно сводится к тому, действительно ли вы намеревались иметь нулевую логическую переменную, и если да, то как вы хотите обрабатывать 3 возможных условия null, true or false.

Ответ 3

Вам нужно проверить, имеет ли оно значение. Что вы хотите сделать, если MyBool == null?

if( MyBool.HasValue && !MyBool.Value ) // MyBool is false
if( MyBool.HasValue && MyBool.Value ) // MyBool is true
if( !MyBool.HasValue ) // MyBool is null