2017-10-27 2 views
0

여기 내 문제입니다..Equals 또는 == false를 반환합니다. 항상

정확히 동일한 내용으로 파일링 된 두 개의 데이터 테이블이 있는데 이유는 없습니다. 열을 비교할 때 ==도 아니고 .Equals도 true를 반환 할 수 없습니다.

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

을 두 사람이 동일하지만 둘 중 어느 것도 사실이 아닙니다. 이유는 무엇입니까?

편집

: 여기 는 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이 참조를 비교하는 데에만 사용됩니다 (==과 유사). 그 이후 다른 DataColumn 인스턴스된다 (같은 이름이 있지만 다른 테이블에 속하는) 다른 DataRow의 모든 필드에 하나 DataRow의 모든 필드를 비교할 경우 모두, Equals==false

를 반환하면 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 개의 객체를 비교하기위한 메소드를 작성해야한다.

관련 문제