Cómo: Convertir con seguridad de bool? en bool (Guía de programación de C#)
Actualización: noviembre 2007
El tipo bool?, que acepta valores NULL, puede tener tres valores diferentes: true, false y null. Por consiguiente, el tipo bool? no se puede utilizar en instrucciones condicionales con if, for o while. Por ejemplo, este código no se puede compilar con Error del compilador CS0266:
bool? b = null;
if (b) // Error CS0266.
{
}
Esto no está permitido porque el significado de null en el contexto de una instrucción condicional es incierto. Para utilizar un tipo bool? en una instrucción condicional, compruebe primero su propiedad HasValue para asegurarse que su valor no es null, y, a continuación, conviértalo a bool. Para obtener más información, vea bool. Si convierte un tipo bool? que tiene un valor null, se producirá una excepción InvalidOperationException durante la comprobación de instrucciones condicionales. En el ejemplo siguiente se muestra una manera segura de convertir bool? en bool:
Ejemplo
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.
}