Frage

Ich versuche, zwei DataRows in einer Schleife zu vergleichen. Allerdings ist die folgende Anweisung if nicht true zurück:

if (dt1.Rows[0]["Name"] == dt2.Rows[b]["Name"]) {
    // This never executes
}

Wenn ich jedoch .ToString() bis zum Ende eines jeden DataRow hinzufügen, if die true Anweisung gibt:

if (dt1.Rows[0]["Name"].ToString() == dt2.Rows[b]["Name"].ToString()) {
    // This now executes
}

In der Spalte „Name“ ist aus derselben Tabelle / Spalte. Die Frage ist also ganz einfach ... Was mache ich falsch?

Danke
Stephen

War es hilfreich?

Lösung

Wie itsmatt gesagt hat , Ihre erste Snippet macht einen Referenz Vergleich. Eine alternative ToString zu nennen ist Object.Equals zu verwenden:

if (Object.Equals(dt1.Rows[0]["Name"], dt2.Rows[b]["Name"])) {
    // stuff
}

Der Grund für die statische Methode anstelle der Instanz-Methode ist es, Probleme mit null Verweisen zu vermeiden.

Andere Tipps

Diese Zellen halten Objekte, so dass Sie ein Objekt Vergleich tun, die nur einen Verweis Vergleich der Fall ist, die aus einem Wertvergleich unterscheidet. Es stellt sich die Frage: „Sind diese beiden Objekte wirklich das gleiche Objekt?“, Im Wesentlichen sind sie auf das gleiche Objekt beziehen, also „Referenzvergleichs“. Wenn Sie den ToString () -Aufruf zu tun, werden Sie dann String-Vergleich zu tun. Deshalb ist es funktioniert.

Hier ist ein Link zu MS der Diskussion von Operator == und Vergleich.

Der == Operator, wenn nicht überlastet ist, ist identisch mit ReferenceEquals() - das heißt, sie bestimmt, ob zwei gegebene objects die gleichen Instanzen

.

Der Aufruf von ToString() gibt ein Objekt von string Klasse, die == Betreiber überlastet hat, die String-Vergleich der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top