0

如果我有这个:

 List<DataTable> listDataTables = functionToAddSomeDataTables();

我想做一个这样的比较:

if(listDataTables.Contains(aDataTable))
{
   //do something.
}

我怎么知道它是在比较参考、模式、内容还是以上所有内容?

我是否需要编写自己的 IEquatable.Equals 以确保它正常工作,或者我是否可以相信 DataTable 的内置 .Equals 可以按我希望的那样工作?

是否有一般规则或观察来了解何时 .Contains 或类似的比较是通过引用还是通过值?

提前致谢 :)

4

2 回答 2

1

您必须编写自己的 Equals 方法并比较所需的属性。内置(默认) Contains() 方法将检查值类型(字符串、int ...)的值和引用类型的引用(您的类是引用类型)

于 2013-10-21T15:08:38.560 回答
1

List<T>.Contains使用对象的object.Equals(object)方法。由于DataTable的文档说它Equals是从 继承的,因此将使用参考比较Object.Equals的默认实现。Object.Equals如果您希望通过其他方式进行比较,请使用 LINQ 的Contains方法包含该相等比较器。

(例如,比较DataTable 方法小数方法:仅在左侧列表中列出,并说“(覆盖 ValueType.Equals(Object)。)”而不是“(继承自 Object。)” DecimalEquals

于 2013-10-21T15:10:02.123 回答