web-dev-qa-db-fra.com

Impossible de convertir implicitement le type bool?

J'essaie de convertir ma valeur booléenne nullable et j'obtiens cette erreur.

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

Par exemple:

public virtual bool? MyBool
  {
    get;
    set;
  }

if (!MyBool){}
24
user603007

Comme l'indique l'erreur, vous ne pouvez pas utiliser un bool? Dans un conditionnel. (Que se passerait-il si c'est null?)

Au lieu de cela, vous pouvez écrire if (MyBool != true) ou if (MyBool == false), selon que vous souhaitez inclure null. (et vous devez ajouter un commentaire expliquant cela)

30
SLaks

Vous devez utiliser MyBool.Value

par exemple:

if (!MyBool.Value) { }

Cependant, vous devez tester qu'il a effectivement une valeur pour commencer. Cela teste que MyBool a une valeur et elle est fausse.

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

Ou vous pourriez vraiment vouloir ce qui suit qui exécute le bloc de code s'il n'a pas été attribué ou s'il est faux.

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

La question se résume vraiment à savoir si vous aviez vraiment l'intention d'avoir une variable booléenne nullable et, dans l'affirmative, comment vous voulez gérer les 3 conditions possibles de null, true or false.

9
NotMe

Vous devez vérifier s'il a une valeur. Que voulez-vous faire si MyBool == null?

if( MyBool.HasValue && !MyBool.Value ) // MyBool is false
if( MyBool.HasValue && MyBool.Value ) // MyBool is true
if( !MyBool.HasValue ) // MyBool is null
2
The Real Baumann