net - propiedad nullable c#
¿Cuál es el valor predeterminado del tipo anulable "int?"(Incluido el signo de interrogación)? (3)
El valor predeterminado para
int?
- y para cualquier tipo anulable que use el "tipo?"
declaración - es
null
.
Por qué este es el caso:
-
int?
es azúcar sintáctico para el tipo Nullable<T> (donde T esint
), una estructura. ( here ) -
El tipo
Nullable<T>
tiene un miembro bool HasValue , que cuando esfalse
, hace que laNullable<T>
"actúe como" un valornull
. En particular, el método Nullable <T> .Equals se anula para devolvertrue
cuando seNullable<T>
unNullable<T>
conHasValue == false
con un valornull
real. -
A partir de la
Especificación del lenguaje C # 11.3.4
, el valor predeterminado inicial de una instancia de estructura es que todos los campos de tipo de valor de esa estructura se establecen en su valor predeterminado, y todos los campos de tipo de referencia de esa estructura se configuran como
null
. -
El valor predeterminado de una variable
bool
en C # esfalse
( reference ). Por lo tanto, la propiedadHasValue
de unaNullable<T>
predeterminada esfalse
; lo que a su vez hace que laNullable<T>
sí misma actúe comonull
.
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
null
o
0
, pero ¿cuál es?)
Me pareció importante compartir el
Nullable<T>.GetValueOrDefault()
, que es particularmente útil cuando se trabaja con cálculos matemáticos que usan
Nullable<int>
aka
int?
valores.
Hay muchas ocasiones en las que no tiene que verificar la propiedad
HasValue
y simplemente puede usar
GetValueOrDefault()
lugar.
var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());
var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);
Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());