记一次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即可。
作者:qbning
-------------------------------------------
个性签名:曾经的我们空有一颗望海的心,却从没为前往大海做过真正的努力
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!