Ich versuche, eine Sache in diesem Code zu verstehen:Wie kann CLR den Wurffehler umgehen, wenn der Struktur ein Nullwert zugewiesen wird?
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());
und Ausgang ist:
x: HasValue=True, Value=5
y: HasValue=False, Value=0
Und die Sache, die ich nicht verstehe, wenn Sie null
zu y
passieren, ich glaube, es ruft public static implicit operator Nullable<T>(T value)
auf, aber die Definition dieser Methode initialisiert eine neue Struktur, die value
übergibt, die null
zugewiesen wird, jedoch überprüft die Konstruktormethode nicht, ob es null ist oder nicht, sodass default(T)
zuzugewiesen werden kann.
Wie können wir hier sogar null zu struktur zuweisen und es funktioniert gut?
Können Sie Leute, die ich hier verpasse? Ich verstehe nicht, wie es null
umgangen und den Standardwert zurückgegeben.
Nullable Code innere Definition:
ein Grund, warum Sie verwenden nicht die eingebaute 'Nullable' struct? –
Ich lerne gerade die interne Struktur der Nullable-Typen. – Tarik
Als eine Nebenbemerkung: Ihre 'Equals' Implementierung ist gebrochen.Wenn beide Seiten sind Ihre benutzerdefinierte Nullable, und beide sind custom-null, es gibt false zurück, sollte aber true zurückgeben. | Es sollte auch nicht kompiliert werden, da Sie keine Initialisierer für Instanzfelder für Strukturen haben können. – CodesInChaos