En C #, ¿cuál es el valor predeterminado de una variable de instancia de clase de tipo int?
?
Por ejemplo, en el siguiente código, ¿qué valor tendrá MyNullableInt
si nunca se asigna explícitamente?
class MyClass
{
public int? MyNullableInt;
}
(Parece probable que la respuesta sea casi con certeza null
o 0
, pero ¿cuál de ellos es?)
int? x;
y ver cuál es el resultado.Respuestas:
El valor predeterminado para
int?
- y para cualquier tipo que acepte valores NULL que use "type?" declaración - esnull
.Por qué este es el caso:
int?
es azúcar sintáctico para el tipo Nullable <T> (donde T esint
), una estructura. ( referencia )Nullable<T>
tipo tiene un miembro bool HasValue , que cuandofalse
hace que laNullable<T>
instancia "actúe como" unnull
valor. En particular, el Anulable <T> método .equals se anula para volvertrue
cuando unaNullable<T>
conHasValue == false
se compara con un actualnull
valor.null
.bool
variable en C # esfalse
( referencia ). Por lo tanto, laHasValue
propiedad de unaNullable<T>
instancia predeterminada esfalse
; lo que a su vez hace que esaNullable<T>
instancia actúe comonull
.fuente
int? x = null;
aint? x;
, obtengo errores del compilador más abajo en el código: "Uso de la variable local x no asignada".Field 'id' is never assigned to, and will always have its default value 0
. Extraño, ¿no?Me sentí importante compartir el
Nullable<T>.GetValueOrDefault()
método que es particularmente útil cuando se trabaja con cálculos matemáticos que usan valores deNullable<int>
akaint?
. Hay muchas ocasiones en las que no tiene que verificar laHasValue
propiedad y puede usarlaGetValueOrDefault()
en su lugar.fuente
fuente