c# - objeto - no se puede convertir implícitamente el tipo bool en bool
¿No se puede convertir implícitamente el tipo bool? (3)
Estoy intentando convertir mi valor bool anulable y recibo este error.
Cannot implicitly convert type ''bool?'' to ''bool''. An explicit conversion exists (are you missing a cast?)
Por ejemplo:
public virtual bool? MyBool
{
get;
set;
}
if (!MyBool){}
Como dice el error, no puedes usar un bool?
en un condicional. (¿Qué pasaría si es null
?)
En su lugar, puede escribir if (MyBool != true)
o if (MyBool == false)
, dependiendo de si desea incluir null
. (y deberías agregar un comentario explicando eso)
Es necesario comprobar si tiene un valor. ¿Qué quieres hacer 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
Tienes que usar MyBool.Value
por ejemplo:
if (!MyBool.Value) { }
Sin embargo, debe probar que sí tiene un valor para empezar. Esto prueba que MyBool tiene un valor y es falso.
if (MyBool.HasValue && !MyBool.Value) { }
O puede que realmente desee lo siguiente que ejecuta el bloque de código si no se ha asignado o si es falso.
if (!MyBool.HasValue || !MyBool.Value) { }
La pregunta realmente se reduce a si realmente pretendía tener una variable booleana que pueda contener null, true or false
y, de ser así, cómo quiere manejar las 3 condiciones posibles de null, true or false
.