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){}
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)
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
.
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