Pregunta

En C# son los que aceptan valores null tipos primitivos (es decir, bool?) sólo alias para su correspondiente Nullable<T> tipo o es que hay una diferencia entre los dos?

¿Fue útil?

Solución

Si usted mira la IL utilizando Ildasm, usted encontrará que ambos compilar hacia abajo para Nullable<bool>.

Otros consejos

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

Para acceder al valor de la bool?usted necesita hacer lo siguiente:

bool? myValue = true;
bool hasValue = false;

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

Nota usted no puede hacer:

if (myValue)
{
  hasValue = true;
}

Me sorprende que nadie se iba a la fuente (C# spec) todavía.Del artículo 4.1.10 tipos que aceptan valores null:

Un tipo que acepta valores null se escribe T?, donde T es el tipo subyacente.Esta sintaxis es la abreviatura de Sistema.Que aceptan valores null<T>y las dos formas pueden ser utilizados indistintamente.

Así que no, no hay ninguna diferencia entre las dos formas.(Suponiendo que usted no tiene cualquier otro tipo de llamada Nullable<T> en cualquiera de los espacios de nombres que se usan).

Un Nullable<T> es una estructura que consta de una T y un poco de la bandera que indica si es o no es válido.Un Nullable<bool> tiene tres posibles valores:true, false y null.

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

Un bool es un tipo de valor, por lo tanto no puede contener un valor NULO.Si usted envolver cualquier tipo de valor con Nullable<>, que le dará esa posibilidad.Por otra parte, los métodos de acceso para el cambio de valor por propiedades adicionales HasValue y Value.

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

No hay ninguna diferencia.En resumen:

Sistema.Boolean -> valores válidos :true, false

bool -> alias para el Sistema.Boolean

Que aceptan valores null<bool> -> valores válidos :true, false, null

bool?-> alias para los que aceptan valores null<bool>

Espero que esto ayude.

Null primitivas son sólo regulares primitivas envuelto en los aceptan.Cualquier al contrario de las apariencias son sólo el compilador y sintácticos de azúcar.

Ninguna diferencia.Echa un vistazo aquí: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

"La sintaxis de T?es una abreviatura para el que acepta valores null, donde T es un tipo de valor.Las dos formas son intercambiables."

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top