如果我有这个:
List<DataTable> listDataTables = functionToAddSomeDataTables();
我希望做这样的比较:
if(listDataTables.Contains(aDataTable))
{
//do something.
}
我如何知道它是在比较参考或架构,内容还是以上所有内容?
我是否需要编写自己的IEquatable.Equals以确保它正常工作,或者我是否可以相信DataTable的内置.Equals可以正常工作?
是否有一般规则或观察知道何时。包含或类似的比较是通过引用还是通过值?
提前致谢:)
答案 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 Methods和Decimal Methods:仅左侧列表中的Decimal
列出Equals
,并说“(覆盖ValueType.Equals(对象) )。)“而不是”(继承自Object。)“)