18 Stimmen

C#-Objekt ist nicht null, aber (myObject != null) gibt trotzdem false zurück

Ich muss einen Vergleich zwischen einem Objekt und NULL durchführen. Wenn das Objekt nicht NULL ist, fülle ich es mit einigen Daten.

Hier ist der Code:

 if (region != null)
 {
  ....
 }

Dies funktioniert, aber wenn Schleife und Schleife irgendwann die Region Objekt ist NULL (ich kann Daten innerhalb es im Debug-Modus sehen). Im Schritt-für-Schritt-Debugging geht es nicht innerhalb der IF-Anweisung... Wenn ich einen Quick Watch mit dem folgenden Ausdruck ausführe, sehe ich, dass (region == null) false zurückgibt, UND (region != null) ebenfalls false zurückgibt... warum und wie?

Update

Jemand hat darauf hingewiesen, dass das Objekt == und != überladen wurde:

    public static bool operator ==(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }

        return (r1.Cmr.CompareTo(r2.Cmr) == 0 && r1.Id == r2.Id);
    }

    public static bool operator !=(Region r1, Region r2)
    {
        if (object.ReferenceEquals(r1, null))
        {
            return false;
        }
        if (object.ReferenceEquals(r2, null))
        {
            return false;
        }
        return (r1.Cmr.CompareTo(r2.Cmr) != 0 || r1.Id != r2.Id);
    }

0voto

dlamblin Punkte 42420

Es ist also so, dass diese Kontrollen hier nicht richtig sind:

public static bool operator !=(Region r1, Region r2)
{
    if (object.ReferenceEquals(r1, null))
    {
        return false;
    }
    if (object.ReferenceEquals(r2, null))
    {
        return false;
    }
...

0voto

faulty Punkte 7807

Es besteht auch die Möglichkeit, dass Sie auf das Aktualisierungssymbol neben dem Parameter klicken müssen, den Sie beobachten. VS versucht, mit der Leistung Schritt zu halten, ohne jede Aussage/jeden Parameter zu bewerten. Werfen Sie einen Blick darauf, um sicher zu gehen, bevor Sie Änderungen an Stellen vornehmen, die nicht relevant sind.

0voto

fernando Punkte 21
bool comp;
if (object.IsNullOrEmpty(r1))
{
    comp = false;
}

if (object.IsNullOrEmpty(r2))
{
    comp = false;
}
return comp;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X