Comment : effectuer sans risque un cast du type bool? en bool (Guide de programmation C#)How to: Safely Cast from bool? to bool (C# Programming Guide)

Le type Nullable bool? peut contenir trois valeurs différentes : true, false et null.The bool? nullable type can contain three different values: true, false, and null. Par conséquent, le type bool? ne peut pas être utilisé dans des instructions conditionnelles comme if, for ou while.Therefore, the bool? type cannot be used in conditionals such as with if, for, or while. Par exemple, le code suivant génère une erreur du compilateur.For example, the following code causes a compiler error.

bool? b = null;  
if (b) // Error CS0266.  
{  
}  

Cela n’est pas autorisé, car il est difficile de savoir ce que null signifie dans le contexte d’une instruction conditionnelle.This is not allowed because it is unclear what null means in the context of a conditional. Pour utiliser un bool? dans une instruction conditionnelle, examinez d’abord sa propriété HasValue pour vérifier que sa valeur n’est pas null, puis castez-le en bool.To use a bool? in a conditional statement, first check its HasValue property to ensure that its value is not null, and then cast it to bool. Pour plus d'informations, consultez bool.For more information, see bool. Si vous effectuez le cast sur un bool? avec la valeur null, une exception InvalidOperationException est levée dans le test conditionnel.If you perform the cast on a bool? with a value of null, a InvalidOperationException will be thrown in the conditional test. L’exemple suivant illustre une façon d’effectuer sans risque un cast de bool? en bool :The following example shows one way to safely cast from bool? to bool:

ExempleExample

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

Voir aussiSee Also

Guide de programmation C#C# Programming Guide
Mots clés littérauxLiteral Keywords
Types NullableNullable Types
?? Opérateur?? Operator