2011-08-06 21 views
7

Soy nuevo en C# y acabo de enterarme de que los objetos pueden ser nulos en C# pero int no.¿Por qué int no puede ser nulo? ¿Cómo funciona nullable int (int?) En C#?

¿Cómo funciona nullable int (int?) en C#?

+3

Yo invertiría en un buen libro sobre C#. Seguramente tendrás muchas más preguntas sobre sintaxis básica como esta y pedirles individualmente sobre SO tomaría mucho tiempo. –

+0

http://stackoverflow.com/questions/6191339/why-type-int-is-never-equal-to-null – Bart

+1

@Bart: Veo que se cerró como una trampa del único jleedev vinculado, pero esta pregunta es mucho más específico para C# con tipos de valores que se pueden nullar ... – BoltClock

Respuesta

1

Los objetos son tipos de referencia y no pueden hacer referencia a nada ni a NULL; sin embargo, int es un tipo de valor que solo puede contener un valor y no puede hacer referencia a nada.

1

Los tipos de valores como int contienen valores directos en lugar de referencias como ReferenceType. Un valor no puede ser nulo, pero una referencia puede ser nula, lo que significa que no apunta a nada. Un valor no puede tener nada en él. Un valor siempre contiene alguna clase de valor

tipos anulables o anulables son tipos de valor especiales que además de los valores normales de los tipos de valor también apoyan valor nulo adicional al igual que los tipos de referencia

2

Un int es un tipo de valor. Es realmente de tipo Int32. Los objetos que pueden ser anulables son tipos de referencia. En un nivel básico, la diferencia es que un tipo de valor almacenará el valor con la variable donde un tipo de referencia almacenará una referencia al valor. Una referencia puede ser nula, lo que significa que no apunta a un valor. Donde un tipo de valor siempre tiene un valor.

Nullable ajusta un tipo de valor para permitirle tener la opción de ser nulo. Usando int? es solo un atajo de compilador para declarar un tipo que admite nulos.

0

El tipo int primitivo no puede expresar nulo en su representación binaria, pero Nullable<int> agregó un byte extra para expresar la información nula de este valor.

+0

Alguien da el voto negativo debe mostrar la razón. Nullable agrega un archivo bool privado adicional 'hasValue' a la definición de la estructura para expresar nulo de int, además, el CLR necesita ser revisado un poco para tratar con esta estructura especial al compararla con null. La primitiva int no puede representar nulo ya que todas sus permutaciones binarias representan el valor de int, en la condición de que tenga 4 bytes en la pila. – Thomson

+0

No lo rechacé, pero puede haber sido debido a un hecho poco conocido sobre el diseño de la memoria sin ninguna documentación de respaldo. De lo contrario, no estoy seguro. – recursive

2

puede ordenar una int anulable mediante el uso de int? o Nullable<int>, ambos son exactamente lo mismo.