我怎样才能确定List.Contains是否适用于DataTables列表?

时间:2013-10-21 15:05:52

标签: c# list datatable comparison

如果我有这个:

 List<DataTable> listDataTables = functionToAddSomeDataTables();

我希望做这样的比较:

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

我如何知道它是在比较参考或架构,内容还是以上所有内容?

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

是否有一般规则或观察知道何时。包含或类似的比较是通过引用还是通过值?

提前致谢:)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

(例如,比较DataTable MethodsDecimal Methods:仅左侧列表中的Decimal列出Equals,并说“(覆盖ValueType.Equals(对象) )。)“而不是”(继承自Object。)“)