将ArrayList包含方法应用于DataRow

时间:2013-09-17 17:05:27

标签: c# arraylist

我对C#中Contains的{​​{1}}方法感到困惑。我有以下代码,当我的表中有重复的行时,行ArrayList是否返回true?

我把输入写成:

UniqueRecords.Contains(dRow)

所以它有重复的行, 但DataRow sourceRow = myTable.Rows[1]; myTable.ImportRow(sourceRow); 不会返回true。有什么帮助吗?

UniqueRecords.Contains(dRow)

2 个答案:

答案 0 :(得分:1)

ArrayList类将使用相关对象的Equals方法来比较它们。碰巧Equals DataRow方法实际上没有比较行中所有列的值,只是比较了对该行的引用。这意味着具有相同数据的两个不同行不等于"根据该类型,并因此ArrayList

您可以创建一个能够使用您自己的相等定义的IEqualityComparer<DataRow>,然后List<DataRow>可以使用Contains的额外重载接受IEqualityComparer<DataRow> {1}}。更好的是,您可以使用HashSet代替List,因为它可以比List更快地进行搜索。

事实上,在这种特殊情况下,您甚至不需要自己编写比较器,语言已经存在:DataRowComparer。它专门用于提供基于价值的平等,这是您想要的。

答案 1 :(得分:0)

它完全取决于ArrayList如何比较列表中的两个对象。当这个数据结构要求比较器比较两个对象的引用(对于引用类型对象)时,因为两个所谓的相同行具有不同的引用,它们被比较器感知不相等,尽管它们在每列中具有相同的值。 p>