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).
Ninguna diferencia. Eche un vistazo aquí: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
"La sintaxis T? Es una abreviatura de Nullable, donde T es un tipo de valor. Las dos formas son intercambiables".