我试图让几个操作使用相同的比较方法,但我无法让它们全部使用它。在下面的代码中,我设置了一个断点来检查哪些操作正在使用它。我的结果显示,虽然List.Contains()确实使用它,但List.Distinct()和“==”却没有。
如何让所有3个人使用我的平等比较?
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
List<TestObject> list1 = new List<TestObject>();
list1.Add(new TestObject("test1"));
list1.Add(new TestObject("test1"));
List<TestObject> list2 = list1.Distinct().ToList();
if (list1[0] == list1[1]) { }
if (list2.Contains(list1[0])){ }
}
}
class TestObject: IEquatable<TestObject>
{
string name;
public TestObject(string name)
{
this.name = name;
}
public bool Equals(TestObject other)
{
return this.name == other.name;
}
}
}
谢谢
答案 0 :(得分:1)
对于IEnumerable<T>
,Distinct
使用默认的IEquatableComparer<T>
比较器(除非您传递自己的比较器)。在内部,这依赖于GetHashCode
来执行相等性检查,而Contains
使用Equals
,因此它们不会产生相同的结果。
通常建议您在实施自己的自定义相等检查时覆盖Equals
和GetHashCode
,请参阅Guidelines for Overloading Equals() and == Operator。
答案 1 :(得分:0)
==通常用于确定两个引用是否相同。如果要为类更改此行为,则需要根据此处的说明覆盖==运算符:
https://msdn.microsoft.com/en-US/library/ms173147(v=vs.80).aspx