Heim >Backend-Entwicklung >C++ >Können Werttypen in C# mit Null verglichen werden, und wenn ja, wie?
C#-Werttyp und Nullvergleich
In C# können Werttypen nicht null zugewiesen werden. Dies liegt daran, dass Werttypen auf dem Stapel gespeichert werden und der Stapel keine Nullreferenzen zulässt. Ein Werttyp kann jedoch mithilfe des Gleichheitsoperators (==) oder des Ungleichheitsoperators (!=) mit Null verglichen werden.
Bedenken Sie den folgenden Code:
<code class="language-csharp">int x = 1; if (x == null) { Console.WriteLine("What the?"); }</code>
Dieser Code löst keinen Fehler bei der Kompilierung aus, auch wenn der int-Wert nicht null sein darf. Dies liegt daran, dass der Gleichheitsoperator überladen ist, um den Vergleich von Werttypen mit Nullable-Werttypen zu ermöglichen. Ein nullbarer Werttyp ist ein Wrapper, der einen Wert des zugrunde liegenden Typs oder null enthalten kann.
In diesem Fall wird der int-Wert x implizit in ein nullbares int konvertiert und dann mit dem Nullliteral verglichen. Der Vergleich ist immer falsch, daher wird die Meldung „Was?“ nie gedruckt.
Wenn Sie jedoch versuchen, einem Werttyp einen Nullwert zuzuweisen, erhalten Sie beim Kompilieren einen Fehler:
<code class="language-csharp">int x = null; // Error CS0037: Cannot convert null to 'int' because it is a non-nullable value type</code>
Das liegt daran, dass es keine implizite Konvertierung von Null- in Nicht-Nullable-Werttypen gibt.
Zusammenfassend lässt sich sagen, dass Werttypen mithilfe der Gleichheits- oder Ungleichheitsoperatoren mit Null verglichen werden können. Allerdings können ihnen keine Nullwerte zugewiesen werden. Dieses Verhalten ermöglicht Flexibilität beim Codieren und behält gleichzeitig die Integrität des Werttyps bei.
Das obige ist der detaillierte Inhalt vonKönnen Werttypen in C# mit Null verglichen werden, und wenn ja, wie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!