Das Ergebnis des Ausdrucks ist immer wahr, da ein Wert vom Typ int niemals gleich null des Typs int ist

8
%Vor%

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?

    
Maya 20.07.2011, 16:20
quelle

8 Antworten

20

int kann niemals gleich null sein. int? ist die Nullable-Version, die gleich null sein kann.

Sie sollten stattdessen if(arrTopics.Count() != 0) überprüfen.

    
mdm 20.07.2011, 16:21
quelle
5

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.

    
CodesInChaos 20.07.2011 16:22
quelle
5

Es bedeutet, was es sagt.

Die Methode "Count" gibt einen Werttyp zurück. Es ist eine ganze Zahl. Es wird immer einen Wert haben, dessen Standardwert Null ist.

Ihr Check sollte wirklich sein:

%Vor%     
Khepri 20.07.2011 16:21
quelle
4

Wie der Fehler sagt, kann int niemals null sein. Ich würde den Code in

ändern %Vor%

Oder noch effizienter, wenn Sie wissen arrTopics ist ein Array und niemals null ist

%Vor%     
Yuriy Faktorovich 20.07.2011 16:22
quelle
4

Was möchten Sie hier fragen?

%Vor%

Wenn Sie wissen wollen, ob das Array initialisiert wurde, dann:

%Vor%

Wenn Sie wissen wollen, ob es initialisiert wurde, aber keine Mitglieder hat:

%Vor%     
BonyT 20.07.2011 16:24
quelle
3

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.

    
Rudy Velthuis 20.07.2011 16:22
quelle
3

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

    
Senad Meškin 20.07.2011 16:22
quelle
3

Um es herauszufinden, schauen Sie sich die Erklärung der Count () Erweiterungsmethode an.

Puzzle aus zwei Teilen:

  1. 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.

  2. 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.

    
Artur Mustafin 20.07.2011 16:32
quelle

Tags und Links