valores valor utilice usar tipo tener resultado que puede property parámetro objeto net manejo genérico deben debe dato convertir consulta acepte acepta c# .net nullable

c# - valor - tipo de dato null



¿Hay alguna diferencia entre tipo? y Nullable<tipo>? (9)

Las primitivas nulas son simplemente primitivas regulares envueltas en Nullable. Cualquier apariencia de lo contrario es solo el compilador y el azúcar sintáctico.

En C #, ¿son los tipos primitivos que Nullable<T> (es decir, bool? ) Solo alias para su tipo Nullable<T> o existe una diferencia entre los dos?


No hay diferencia entre bool? b = null bool? b = null y Nullable<bool> b = null . El ? es solo la sintaxis del compilador de C # azúcar.


No, no hay diferencia En resumen:

System.Boolean -> valores válidos: verdadero, falso

bool -> alias para System.Boolean

Nullable <bool> -> valores válidos: verdadero, falso, nulo

bool? -> alias para Nullable <bool>

Espero que esto ayude.


Para acceder al valor del bool? necesitas hacer lo siguiente:

bool? myValue = true; bool hasValue = false; if (myValue.HasValue && myValue.Value) { hasValue = true; }

Tenga en cuenta que no puede simplemente hacer:

if (myValue) { hasValue = true; }


Un bool es un tipo de valor, por lo tanto, no puede contener un valor NULL. Si Nullable<> cualquier tipo de valor con Nullable<> , le dará esa capacidad. Además, los métodos de acceso al valor cambian por las propiedades adicionales HasValue y Value .

Pero a la pregunta: Nullable<bool> y bool? son alias.


Una Nullable<T> es una estructura que consta de una T y una bandera de bit que indica si la T es o no válida. Un Nullable<bool> tiene tres valores posibles: verdadero, falso y nulo.

Editar: Ah, me perdí el hecho de que el signo de interrogación después de "bool" era en realidad parte del nombre del tipo y no un indicador de que estaba haciendo una pregunta :). La respuesta a su pregunta, entonces, es "sí, el C # bool? es solo un alias para Nullable<bool> ".


Si miras a IL usando Ildasm , verás que ambos compilan hasta Nullable<bool> .


Me sorprende que nadie haya ido a la fuente (la especificación de C #) todavía. De §4.1.10 Tipos anulables:

Un tipo que admite nulos se escribe T ?, donde T es el tipo subyacente. Esta sintaxis es una abreviatura de System.Nullable <T>, y las dos formas se pueden usar indistintamente.

Entonces, no, no hay ninguna diferencia entre las dos formas. (Suponiendo que no tiene ningún otro tipo llamado Nullable<T> en ninguno de los espacios de nombres que usa).