Heim >Backend-Entwicklung >C++ >Warum kann ein C#-Werttyp ohne Fehler mit Null verglichen werden?
Ein eigenartiges Phänomen in C#: Vergleich von Werttypen und Null
In der C#-Programmierung gelten Werttypen im Allgemeinen als unveränderlich und haben feste Werte. Beim Vergleich von Werttypen mit Nullwerten ergibt sich jedoch ein rätselhaftes Phänomen.
Der folgende Code zeigt ein verwirrendes Szenario:
<code class="language-csharp">Int32 x = 1; if (x == null) { Console.WriteLine("What the?"); }</code>
Überraschenderweise lässt sich dieser Code fehlerfrei kompilieren. Interessanterweise gibt der Compiler beim Versuch, einer Werttypvariablen Null zuzuweisen, einen Fehler wie diesen aus:
<code class="language-csharp">Int32 x = null;</code>
Dieses Verhalten verwirrt Entwickler und wirft die Frage auf, ob Werttypen null sein können.
Die Antwort auf dieses Dilemma liegt in der Überlastung der Bediener. C# bietet einen überladenen ==-Operator, der zwei Nullable-Ganzzahlen als Argumente akzeptiert. Int-Variablen können in nullfähige Ints konvertiert werden, ebenso wie Nullliterale. Daher ist der Vergleich gültig und wird immer als falsch ausgewertet.
In ähnlicher Weise ist auch der Ausdruck „if (x == 12,6)“ gültig, wenn auch von anderer Art. Int-Variablen werden in Double konvertiert und Literale werden in Double konvertiert. Da diese Werte nicht gleich sind, ist das Ergebnis immer falsch.
Zusammenfassend lässt sich sagen, dass der offensichtliche Unterschied in der Art und Weise, wie C# mit Werttypen und Null umgeht, auf eine Operatorüberladung zurückzuführen ist. Der Compiler verwendet einen einzigartigen Satz von Regeln, um den am besten geeigneten Operator für jeden Vergleich zu bestimmen, sodass Werttypen mit Null verglichen werden können, ohne einen Fehler auszulösen.
Das obige ist der detaillierte Inhalt vonWarum kann ein C#-Werttyp ohne Fehler mit Null verglichen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!