2017-10-27 7 views
0

が私の問題です。.Equalsまたは== falseを返します。常に

私は全く同じ内容で2つのデータファイルを提出していますが、理由は分かりません。私はその列を比較すると==でも.Equalsも真を返すことができません。

public void btn_Source_Click(object sender, EventArgs e) 
    {    
     FichierSource.OuvertureSource(); 
     FichierSource.OuvertureBanque(comboBox1); 
     int i = 0; 
     foreach (DataColumn colonne in FichierSource.DTSource.Columns) 
     { 
      if (colonne == FichierSource.DTBanque.Columns[i]) 
       MessageBox.Show("Same"); 
      else 
       MessageBox.Show("Not the same"); 
      i++; 
     } 
    } 

のDataTableの両方が、2つの異なるCSVでフィールドですが、両方CSVは、このコンテンツを持っている: Nom|Prenom|Date|numero Jack|Jared|17.04.17|1626010548999 Daphne|Orli|08.02.18|1660101461799 Dphne|Thane|04.06.18|1635062807599 Odessa|Gannon|08.02.18|1626032546899 Charles|Jena|22.11.16|1626040845399

私は同じ問題の多くを赤とは==の違いを理解し考えて、 。これらの2人のどちらも真実を返さないが、なぜなら?

EDIT:ここ は、両方の変数の値を持つスクリーンショットenter image description here

+12

どちらも異なるインスタンスなので、演算子がそれらのオブジェクトのためにオーバーロードされるので、文字列リテラルまたは整数などのために働くでしょう。 'DataColumn'の場合、インスタンスが同じ場合にのみtrueを返します。 2つのオブジェクトをcomapreするメソッドを書く必要があります – praty

+2

==および/またはEqualsがオブジェクトインスタンスで行うことを理解していますか? – mikelegg

+1

最初にequalsが動作する方法を読んでください。 –

答えて

8
  1. あなたが(名前や他の施設の中で型を持つ)DataTablesが、そのDataColumnsの内容を比較しません。
  2. あなたが==を使用する場合にのみ比較参照が
  3. Equalsは役に立たないのいずれかDataColumnので、それを上書きしません(あなたはSystem.String doesをf.e.値で比較すること==演算子をオーバーロードする必要があります)。したがってObject.Equalsが参照を比較するだけです(==に似ています)。これらは、あなたが他のDataRowあなたのすべてのフィールドと1 DataRowのすべてのフィールドを比較したい場合はfalse

を返し、両方とも、Equals==異なるDataColumnインスタンスである(同じ名前が異なるテーブルに属している)されているので、 DataRowComparerer.Defaultを使用することができ、列の代わりに行をループする必要があります。

var rowFieldComparer = DataRowComparer.Default; 
for(int i = 0; i < FichierSource.DTSource.Rows.Count; i++) 
{ 
    if (rowFieldComparer.Equals(FichierSource.DTSource.Rows[i], FichierSource.DTBanque.Rows[i])) 
     MessageBox.Show("Same"); 
    else 
     MessageBox.Show("Not the same"); 
} 
+0

私はそれを得ました、私は理解していると思っていました== /。 ありがとう。 – FistiPaul

+0

@FistiPaul:どうぞよろしくお願いいたします。私は私の答えを少し編集したことに注意してください。見てみましょう –

0

どちらのオブジェクトが異なるインスタンスです。それらのプリミティブプロパティをチェックするか、2つのオブジェクトを比較するメソッドを記述する必要があります。

関連する問題