.Equals或==总是返回false

Fis*_*aul 0 c# csv datatable

这是我的问题.

我有2个数据表提交完全相同的内容,但我不明白为什么,当我比较他们的列既不能==.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++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

两个数据表都是2个不同的字段,CSVCSV都有这个内容: 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

我解决了很多相同的问题,我认为我理解了==和.Equals之间的区别,但是这2个都没有返回true,为什么?

编辑:这是一个两个变量值的屏幕截图,在这里输入图像描述

Tim*_*ter 8

  1. 你不比较的内容DataTables,但他们DataColumns(其中有一个名字和其他属性之间的类型).
  2. 如果你使用==你想比较引用(你必须重载==运营商通过值FE来比较System.String)
  3. Equals也没有帮助,因为DataColumn不会覆盖它.因此Object.Equals使用它只是比较引用(类似于==).因为那些是不同的DataColumn实例(相同的名称但属于不同的表),Equals并且==,返回false

如果要比较一个DataRow的所有字段与另一个字段DataRow可以使用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");
}
Run Code Online (Sandbox Code Playgroud)