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;
            }
        }
    }

感谢

List.Distinct()和==未使用我的相等比较

对于IEnumerable<T>Distinct使用默认的IEquatableComparer<T>比较器(除非您传递自己的比较器(。在内部,这依赖于GetHashCode来执行相等性检查,其中Contains使用Equals,因此它们不会产生相同的结果。

通常建议您在实现自己的自定义相等检查时同时重写EqualsGetHashCode,请参阅重载Equals((和==运算符的指导原则。

==通常用于确定两个引用是否相同。如果你想改变你的类的这种行为,那么你需要按照这里的说明覆盖==运算符:

https://msdn.microsoft.com/en-US/library/ms173147(v=vs.80(.aspx