Heim >Backend-Entwicklung >C++ >Können Werttypen in C# mit Null verglichen werden?

Können Werttypen in C# mit Null verglichen werden?

Linda Hamilton
Linda HamiltonOriginal
2025-01-16 18:24:14655Durchsuche

Can Value Types in C# Be Compared to Null?

Detaillierte Erläuterung des Vergleichs zwischen Werttypen und Null in C#

Obwohl in C# allgemein davon ausgegangen wird, dass Werttypen (z. B. Ganzzahlen) nicht null sein können, können sie tatsächlich mit Nullwerten verglichen werden. Dieses Verhalten kann für Entwickler verwirrend sein, wie im folgenden Codeausschnitt gezeigt:

<code class="language-csharp">Int32 x = 1;
if (x == null)
{
    Console.WriteLine("What the?");
}</code>

Dieser Code widerspricht unserer Erwartung, dass x nicht null sein kann, da null ein nicht gesetztes Wertobjekt darstellt. Der Compiler gibt jedoch keinen Fehler aus, weshalb wir die Gültigkeit dieses Vergleichs in Frage stellen.

Die Erklärung liegt in der einzigartigen Art und Weise, wie Operatoren in C# aufgelöst werden. In diesem Fall identifiziert der Compiler zwei möglicherweise anwendbare Überladungen des ==-Operators:

  1. == Operator für nullfähige Ganzzahlen (Nullable)
  2. Standard-Ganzzahl == Operator (Int32)

x und null sind beide implizit in nullfähige Ganzzahlen konvertierbar (Nullable). Da bei der Operatoranalyse spezifischere Operatoren bevorzugt werden, wird der ganzzahlige Nullable-Operator (== für Nullable) ausgewählt und der Vergleich ergibt immer „falsch“.

Dieses Verhalten steht im Einklang mit Mustern, die den Vergleich von Werttypen mit anderen primitiven Typen ermöglichen. Beispielsweise führt der Vergleich x == 12,6 (wobei x eine Ganzzahl ist) auch immer zu „falsch“, da die Ganzzahl x implizit in eine Gleitkommazahl mit doppelter Genauigkeit konvertierbar ist und der Vergleich zwischen zwei Gleitkommazahlen mit doppelter Genauigkeit erfolgt .

Das obige ist der detaillierte Inhalt vonKönnen Werttypen in C# mit Null verglichen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn