C# .Equals或==始终返回false
这是我的问题 我有两个数据表,它们的内容完全相同,但我不知道为什么,当我比较它们的列时,==或.Equals都不能返回trueC# .Equals或==始终返回false,c#,csv,datatable,C#,Csv,Datatable,这是我的问题 我有两个数据表,它们的内容完全相同,但我不知道为什么,当我比较它们的列时,==或.Equals都不能返回true public void btn_Source_Click(object sender, EventArgs e) { FichierSource.OuvertureSource(); FichierSource.OuvertureBanque(comboBox1); int i = 0;
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++;
}
}
两个数据表字段都有两个不同的CSV,但两个CSV都有以下内容:
名称|前名称|日期|数字
杰克|贾里德| 17.04.17 | 1626010548999
达芙妮|奥利| 08.02.18 | 1660101461799
Dphne | Thane | 04.06.18 | 1635062807599
敖德萨|甘农| 08.02.18 | 1626032546899
查尔斯|耶拿| 22.11.16 | 1626040845399
我遇到了很多相同的问题,我想我理解==和.Equals之间的区别,但是这两个都不返回真值,为什么
编辑:
这是一个屏幕截图,两个变量的值都是不同的实例。您应该检查它们的基本属性,或者编写方法来比较两个对象 您不会比较DataTables的内容,而是比较它们的DataColumns,其中包含名称和类型以及其他属性。 如果您使用==仅比较引用,则必须重载==运算符,以便通过f.e.指定的值进行比较。 Equals也不会有帮助,因为DataColumn不会覆盖它。使用So,它只是将ReferenceSimilar与==进行比较。由于这些是不同的DataColumn InstanceName名称,但同时属于不同的表,因此等于和==,返回false 如果要将一个数据行的所有字段与另一个数据行的所有字段进行比较,则必须循环行而不是列:
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");
}
因为两者都是不同的例子。它适用于字符串文本或整数等,因为运算符对这些对象重载。对于DataColumn,只有当实例相同时,才会返回true。你必须写一个方法来处理这两个对象你确定你理解==和/或Equals在对象实例上的作用吗?先读一下Equals是如何工作的好吧,我知道了,我想我理解==/.Equals。谢谢你,伙计。@FistiPaul:不客气。请注意,我已经编辑了我的答案一点。看一看