c# - no se puede convertir implícitamente el tipo ''bool?'' a ''bool''. Existe una conversión explícita(¿falta un elenco?)
no se puede convertir implícitamente el tipo int ?'' en int ya existe una conversión explícita (7)
Error: no se puede convertir implícitamente el tipo ''bool?'' a ''bool''. Existe una conversión explícita (¿falta un elenco?)
Código:
Test obj = new Test();
obj.IsDisplay = chkDisplay.IsChecked;
pero cuando uso esto significa fundido en bool entonces no hay error.
Test obj = new Test();
obj.IsDisplay = (bool) chkDisplay.IsChecked;
Necesito saber eso, ¿por qué necesito lanzar este bool a bool?
Gracias
¿Has declarado IsChecked
como un bool?
( Nullable<bool>
). Un booleano anulable puede ser true
, false
o null
. Ahora pregúntese: si IsChecked
era nulo, ¿qué valor debería asignarse a IsDisplay
(que solo puede ser true
o false
)? La respuesta es que no hay una respuesta correcta. Una conversión implícita aquí solo podría producir problemas ocultos, por lo que los diseñadores decidieron permitir solo una conversión explícita y no una implícita.
Como los otros declararon bool?
no es igual a bool
bool?
también puede ser null
, vea Nullable<t>
( msdn ).
Si sabe lo que el estado null
quiere implicar, puede usar el ?? - ¿Operador de msdn nula ( msdn ) para convertir tu bool?
a bool
sin efectos secundarios ( Exception
).
Ejemplo:
//Let´s say "chkDisplay.IsChecked = null" has the same meaning as "chkDisplay.IsChecked = false" for you
//Let "check" be the value of "chkDisplay.IsChecked", unless "chkDisplay.IsChecked" is null, in which case "check = false"
bool check = chkDisplay.IsChecked ?? false;
Me enfrento a tu pregunta cuando estoy usando el operador de verificación de nulos ?.
:
if (!RolesList?.Any()) //Not accepted: cannot convert bool? to bool
Así que estoy usando esto en su lugar
if (RolesList?.Any() != true)
//value is null or false
En tu caso deberías configurarlo así:
obj.IsDisplay = chkDisplay.IsChecked ?? false;
Puedes usar el siguiente código
obj.IsDisplay = chkDisplay.IsChecked == true?true:false;
bool no es igual a bool?
bool
puede tomar dos valores, true
y false
bool?
Puede tomar tres, true false
y null
Por eso son diferentes.
bool?
no es un bool
En realidad, es un Nullable<bool>
http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.110).aspx Nullable<bool>
Si necesita el valor bool
, entonces debería convertir como lo está haciendo o llamar a la propiedad .Value
en el bool?
. También hay una propiedad .HasValue
que puede verificar para asegurarse de que no sea nula.
Si IsChecked
es nulo, esta línea mostrará un error.
obj.IsDisplay = (bool) chkDisplay.IsChecked;
chkDisplay.IsChecked
es de tipo bool?
. Lo que significa que puede contener valores true
, false
y null
. Sin embargo, obj.IsDisplay
es de tipo bool
. Lo que significa que solo puede ser true
o false
.
Por lo tanto, hay que convertirlo explícitamente para escribir bool
. Sin embargo, esto seguirá generando una excepción si el valor que intenta convertir en bool es null
.
bool? nullableBool = null;
bool notNullableBool = (bool)nullableBool; //This will throw InvalidOperationException