如您所知,C#中的Dictionary
类不会覆盖Equals
和hashCode
。我面临的情况是我有一个具有属性Dictionary<T,K>
的类。我使用标准的VS片段为这个类生成了哈希码和等号。因此,当在此类的实例上调用.Equals()
时,对于字典属性,将调用对象的.Equals()
,并且我总是得到错误的结果。
附件是一个示例虚拟类,用于澄清。
public class TestClass : IEquatable<TestClass>
{
private string _dummyName;
private Dictionary<string, string> _dummyDict;
public bool Equals(TestClass other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other._dummyName, _dummyName) && Equals(other._dummyDict, _dummyDict);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (TestClass)) return false;
return Equals((TestClass) obj);
}
public override int GetHashCode()
{
unchecked
{
return ((_dummyName != null ? _dummyName.GetHashCode() : 0)*397) ^ (_dummyDict != null ? _dummyDict.GetHashCode() : 0);
}
}
}
答案 0 :(得分:0)
你正在打电话
return Equals(other._dummyName, _dummyName) && Equals(other._dummyDict, _dummyDict);
将调用您的Equals
实施。对于非{1}}类型的所有对象,此实现返回false
,只要它们不是引用相等。
你的第一个调用hasr字符串作为参数,你的第二个调用字典。两者都要归零。