记一次C#Dictionary中即使重载了Equals和GetHashCode,仍存在问题的情况。

public class Program
{
    public static void Main(string[] args)
    {
        Test test1 = new Test();
        Test test2 = new Test();
        var comparer = EqualityComparer<Test>.Default;
        Console.WriteLine(comparer.Equals(test1, test2)); // True
        Dictionary<Test, string> dict = new Dictionary<Test, string>();
        dict.Add(test1, "test1");
        Console.WriteLine(dict.ContainsKey(test2));
    }
}
public abstract class aaaa
{
    public abstract override bool Equals(object? obj);
    public abstract  int GetHashCode();
}
public class Test:aaaa
{
   
    public override bool Equals(object? obj)
    {
        return true;
    }
    public override int GetHashCode()
    {
        return 0;
    }
}

上面的代码运行的时候第一个输出是True,但第二个输出是False。因为在Test中重载的是aaaa的GetHashCode,而非IEquatable<Test>。

解决方法,父类里的加上override即可。

posted @ 2025-05-08 21:43  qbning  阅读(9)  评论(0)    收藏  举报
描述