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 devolvertruecuando seNullable<T>unNullable<T>conHasValue == falsecon un valornullreal. -
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
boolen C # esfalse( reference ). Por lo tanto, la propiedadHasValuede 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());