这是我的问题。
我有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++;
}
}
两个数据表都是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
我解决了很多相同的问题而且我认为我理解了==和.Equals之间的区别但是这2个都没有返回true,为什么?
编辑: 这是一个包含变量值enter image description here
的屏幕截图答案 0 :(得分:8)
DataTables
的内容,而是DataColumns
的内容(其中包含名称和类型)。==
,则只需比较引用(您必须重载==
运算符以按值进行比较f.e. System.String
does)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");
}
答案 1 :(得分:0)
两个对象都是不同的实例。您应该检查它们的原始属性或编写方法来比较2个对象。