Ich frage mich, ob jemand weiß, wie der C# -Compiler folgende Zuordnung behandelt:Wie wird die Zuordnung des Null-Literals zu einem Typ System.Nullable <T> von .Net (C#) behandelt?
int? myInt = null;
Meine Vermutung ist, dass es eine implizite Konvertierung durchgeführt ist, aber ich kann nicht herausfinden, wie die Null wörtliche Zuordnung behandelt wird. Ich Dissasembled die System.Nullable Objekt und fand die implizite Operator diese außer Kraft gesetzt wird:
public static implicit operator T?(T value) {
return new T?(value);
}
genannt Sobald dies versuchen würde, den sekundären Konstruktor Feuer:
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
das ist, wo meine Verwirrung ins Spiel kommt ... this.value ist von einem Werttyp und kann nicht null sein.
Also weiß jemand, wie diese "Magie" stattfindet ... oder bin ich falsch in der Annahme, dass der sekundäre Konstruktor aufgerufen wird? Wird der Standardkonstruktor aufgerufen, weil der Compiler weiß, dass er die Signatur des zweiten Konstruktors nicht mit dem Nullliteral abgleichen kann (was dazu führt, dass myInt einem neuen "Null" -Nullable zugewiesen wird)?
Dank Jb Evain, ich hätte gedacht, nach IL zu disassemblieren. –