2011-02-17 20 views
11

Tengo un objeto AlternateName.IsMaidenNamemoldeada bool anulable a bool

¡Quiero echar eso a una casilla de verificación - IsMaidenName

no va dejar que me echo de que como se dice, no se puede convertir el tipo de fuente anulable al tipo de destino bool.

He tenido este problema en otros puntos dentro de nuestra aplicación, pero quería echarlo a la calle para una mejor manera de manejar estos problemas.

IsMaidenNameChecked = AlternateName.IsMaidenName; 

Respuesta

28

Es bastante lógico que no se puede emitir un bool anulable a un bool, ya que, ¿qué valor debe tener el bool, cuando el anulable contiene nula?

Lo que quiero hacer, es la siguiente:

IsMaidenNameChecked = AlternateName.IsMaidenName ?? false; 
+0

esto es bueno. me gusta esto aún mejor :-) –

+0

Inicialmente utilicé el hilo a continuación (GetValueOrDefault();) pero este parece un poco mejor ... ambos funcionaron bien ... gracias por la ayuda – gevjen

1

casillas de verificación y Nullable<bool> ambos tienen tres estados: "true", "falso", y "perdido".

Pero está tratando de almacenar el valor en una variable intermedia bool que no tiene forma de manejar "faltantes".

Intente cambiar su variable bool para que también sea bool?.

17
IsMaidenName.Checked = AlternateName.IsMaidenName.GetValueOrDefault(); 

Ver: http://msdn.microsoft.com/en-us/library/72cec0e0.aspx

+1

Con la advertencia adicional de que el valor predeterminado para 'bool' en .NET es' falso' - http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx –

+1

Tenga en cuenta que hay una [sobrecarga] (http://msdn.microsoft.com/en-us/library/3d6d4f1d(v=vs.110).aspx): puede decir 'GetValueOrDefault (true)', es decir, especifique el valor predeterminado para devolver en caso de nulo. Entonces no estás restringido a devolver 'falso'. – David

5

Es posible que desee hacer algo como:

IsMaidenNameChecked = AlternateName.IsMaidenName.GetValueOrDefault(); 

Ver Nullable.GetValueOrDefault(), o puede utilizar la sobrecarga que incluye un defecto explícito.