Domanda

Sto cercando di confrontare due DataRow in un ciclo. Tuttavia, la seguente istruzione if non restituisce true :

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

Tuttavia, se aggiungo .ToString () alla fine di ogni DataRow , l'istruzione if restituisce true :

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

La colonna " Nome " proviene dalla stessa tabella / colonna. Quindi la domanda è abbastanza semplice ... Cosa sto facendo di sbagliato?

Grazie
Stephen

È stato utile?

Soluzione

Come ha detto itsmatt , il tuo primo frammento è: facendo un confronto di riferimento. Un'alternativa alla chiamata ToString è usare Object.Equals :

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

Il motivo dell'utilizzo del metodo statico anziché del metodo dell'istanza è di evitare problemi con riferimenti null.

Altri suggerimenti

Quelle celle contengono oggetti, quindi stai facendo un confronto di oggetti, che fa solo un confronto di riferimento, che è diverso da un confronto di valori. Pone la domanda "Questi due oggetti sono davvero lo stesso oggetto?", Essenzialmente si riferiscono allo stesso oggetto, quindi "confronto di riferimento". Quando esegui la chiamata ToString (), esegui il confronto delle stringhe. Ecco perché funziona.

Ecco un link alla discussione di MS sull'operatore == e il confronto.

L'operatore == , se non sovraccaricato, è identico a ReferenceEquals () , ovvero determina se due dati oggetto sono le stesse istanze.

La chiamata a ToString () restituisce un oggetto della classe string , che ha sovraccaricato l'operatore == , che esegue il confronto delle stringhe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top