Impossible de convertir implicitement le type bool?

J'essaie de convertir ma valeur bool 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
demandé sur MADCookie 2012-02-01 05:31:08

3 réponses

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 devriez ajouter un commentaire expliquant que)

30
répondu SLaks 2012-02-01 01:33:46

Vous devez utiliser MyBool.Valeur

Par exemple:

if (!MyBool.Value) { }

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

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é assigné ou a est false.

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

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

9
répondu NotMe 2012-02-01 01:33:52

, Vous devez vérifier si elle 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
répondu The Real Baumann 2012-02-01 01:44:10