2009-07-29 25 views
7

Me preguntaba: ¿cuándo querría usar el miembro .Value en un tipo anulable en lugar de llamar solo a la variable?Tipos de variables anulables - miembro .value

e.g ..

bool? b = verdadero;

¿Por qué usaría b.Value para obtener el valor en lugar de solo usar b? ¿Qué ventaja o función agrega la llamada .Value?

Respuesta

13

La propiedad del valor es de solo lectura y devolverá el tipo de valor real. La propiedad de valor nunca puede ser nula.

Si espera tener un valor nulo que arroje un valor, entonces marque .HasValue y luego haga referencia al valor. Por ejemplo, si desea asignar el valor de una anulable a un bool ordinaria entonces usted tiene que hacer referencia a su valor:

bool? nullableBool = null; 

if (nullableBool.HasValue) 
{ 
    bool realBool = nullableBool.Value; 
} 

Sin embargo, la siguiente no lo hará de compilación:

bool? nullableBool = true; 
bool realBool = nullableBool; // Won't work 
+0

¡Genial! Eso tiene sentido. Muchas gracias :)) – Valerie

3

.Value devuelve un bool en lugar de un bool? lo que le permitirá usarlo como un parámetro para funciones que no esperan tipos que aceptan nulos.

1

La única diferencia es que son 2 tipos diferentes. Si tiene un bool?, entonces es un tipo de bool que se puede anular.

Si llama b.Value en realidad se está volviendo un bool y no un bool ?.

Sutil, pero cuando necesite la versión del objeto que no admite nulos, use la propiedad .Value.

+0

Typos . Suttle = sutil. –

1

Para mí no es tanto el valor como es la propiedad "HasValue" que me parece útil

2

Cuando se desea utilizar métodos/propiedades del tipo subyacente. Realmente no se aplica a bool. Permítanme ilustrar con DateTime:

DateTime? d; 
int month = d.Value.Month; 

no puede acceder a la propiedad Mes directamente de d, debido a DateTime? no tiene esta propiedad.

Cuestiones relacionadas