Невозможно неявно преобразовать тип 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){}
Ответы
Ответ 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