estoy tratando de entender una cosa en este código:¿Cómo puede CLR omitir el error de lanzamiento al asignar un valor nulo a la estructura?
Nullable<Int32> x = 5;
Nullable<Int32> y = null;
Console.WriteLine("x: HasValue={0}, Value={1}", x.HasValue, x.Value);
Console.WriteLine("y: HasValue={0}, Value={1}", y.HasValue, y.GetValueOrDefault());
y la salida es:
x: HasValue=True, Value=5
y: HasValue=False, Value=0
Y lo que no entiendo cuando se pasa a null
y
, creo que llama a public static implicit operator Nullable<T>(T value)
pero la definición de este método inicializa una nueva estructura que pasa value
que está asignada null
, pero el método constructor no verifica si es nula o no, por lo que puede asignar default(T)
a .
¿Cómo es que incluso podemos asignar null a struct aquí y funciona bien?
¿Pueden chicos lo que me estoy perdiendo aquí? No entiendo cómo pasó por alto null
y devolvió el valor predeterminado.
código anulable definición interna:
ninguna razón por la cual usted no está usando el construido en 'Nullable' struct? –
Estoy aprendiendo la estructura interna de los tipos que aceptan nulos. – Tarik
Como nota al margen: Su implementación 'Igual' está rota. Si ambos lados son su nulo personalizado, y ambos son custom-null, devolverá false, pero debería devolver true. | Tampoco debería compilar, porque no puede tener inicializadores en campos de instancia para estructuras. – CodesInChaos