Comment : effectuer sans risque un cast du type bool? en bool (Guide de programmation C#)
Mise à jour : novembre 2007
Le type nullable bool? peut contenir trois valeurs différentes : true, false et null. Par conséquent, le type bool? ne peut pas être utilisé dans des conditionnels comme if, for ou while. Par exemple, ce code ne se compile pas avec Erreur du compilateur CS0266 :
bool? b = null;
if (b) // Error CS0266.
{
}
Cela n'est pas autorisé parce que la signification de null n'est pas claire dans le contexte d'un conditionnel. Pour utiliser un type bool? dans une instruction conditionnelle, commencez par vérifier sa propriété HasValue pour vous assurer que sa valeur n'est pas null, puis convertissez-le en un bool. Pour plus d'informations, consultez bool. Si vous effectuez le cast sur un type bool? avec une valeur null, une InvalidOperationException sera levée dans le test conditionnel. L'exemple suivant illustre comment convertir sans risque un type bool? en bool :
Exemple
bool? test = null;
...// Other code that may or may not
// give a value to test.
if(!test.HasValue) //check for a value
{
// Assume that IsInitialized
// returns either true or false.
test = IsInitialized();
}
if((bool)test) //now this cast is safe
{
// Do something.
}