Не можете неявно преобразовать тип bool? - PullRequest
24 голосов
/ 01 февраля 2012

Я пытаюсь преобразовать значение nullable 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){}

Ответы [ 3 ]

30 голосов
/ 01 февраля 2012

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

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

9 голосов
/ 01 февраля 2012

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

, например:

if (!MyBool.Value) { }

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

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

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

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

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

2 голосов
/ 01 февраля 2012

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

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