Ich habe eine if-Anweisung wie:
%Vor%Wenn ich mit der Maus über die obige Anweisung fahre, heißt es:
Das Ergebnis des Ausdrucks ist immer wahr, da ein Wert vom Typ int niemals gleich null des Typs int ist.
Ich kann nicht herausfinden, warum es so ist. Kann mir jemand helfen?
null
steht für das Fehlen eines Wertes, nicht die Anzahl 0
. Und wie die Nachricht sagt, kann ein int niemals null
sein, da es weder ein Referenztyp noch ein Nullwerttyp ist und daher immer einen Wert hat.
Wie der Fehler sagt, kann int
niemals null sein. Ich würde den Code in
Oder noch effizienter, wenn Sie wissen arrTopics ist ein Array und niemals null ist
%Vor%Null ist ein spezieller Zeigerwert und keine Ganzzahl. Es gibt Nullwert-Typen, die entweder Null oder einen der möglichen Werte für den Basistyp sind, aber int selbst ist nicht nullbar.
Da die Count-Methode immer eine Ganzzahl zurückgibt, wenn keine Elemente in einem Array zurückgegeben werden, gibt 0 andernfalls eine Anzahl von Elementen zurück. Also, was Sie tun müssen, ist stattdessen != null
make it != 0
oder > 0
Um es herauszufinden, schauen Sie sich die Erklärung der Count () Erweiterungsmethode an.
Puzzle aus zwei Teilen:
Sie versuchen, einen nicht nullbaren Typ (Wert vom Typ int) mit null zu vergleichen, sodass auf Typen, auf die keine Nullwerte zulässig sind, nie verwiesen wird, da alle nicht nullbaren Typen Werttypen in C # sind referenziert werden.
Ungleichheit, die durch den Gleichheitsbetreuer in der Objektklasse definiert wird, die in der Basis definiert ist. Ihr oben erwähnter Code kann also einwandfrei sein. Leider, um die Situation zu unterscheiden, wenn diese Erscheinung des Gleichheitsoperators in Basisklassen nicht erwünscht (nicht überschrieben) ist, gibt es einige Kompiliererwarnungen darüber, weil Sie wirklich eine immer-falsche Bedingung für inkompatible Typen erhalten (oder eine immer wahre Bedingung erhalten) im Ungleichheitsoperator)
Und Werttypen (nicht nullable) und Nullable-Typen (referenzierte Typen) sind in C # inkompatible Typen. Weitere Informationen finden Sie in den ECMA-Papieren zum Standard der Definition für das Typsystem, das in einer C # -Sprache verwendet wird.