List.Distinct()和==未使用我的相等比较
本文关键字:我的 比较 未使用 List Distinct | 更新日期: 2023-09-27 18:01:05
我试图让几个操作使用相同的比较方法,但我无法让所有操作都使用它。在下面的代码中,我设置了一个断点来检查哪些操作正在使用它。我的结果显示,虽然List.Contains((确实使用了它,但List.Dispinct((和"=="没有。
我怎样才能让他们三个都使用我的平等比较?
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;
}
}
}
感谢
对于IEnumerable<T>
,Distinct
使用默认的IEquatableComparer<T>
比较器(除非您传递自己的比较器(。在内部,这依赖于GetHashCode
来执行相等性检查,其中Contains
使用Equals
,因此它们不会产生相同的结果。
通常建议您在实现自己的自定义相等检查时同时重写Equals
和GetHashCode
,请参阅重载Equals((和==运算符的指导原则。
==通常用于确定两个引用是否相同。如果你想改变你的类的这种行为,那么你需要按照这里的说明覆盖==运算符:
https://msdn.microsoft.com/en-US/library/ms173147(v=vs.80(.aspx