我在Equals方法中写的并不重要。 GetHashCode总是被触发,但我不知道要返回哪个GetHashCode? p>
当调用GetHashCode方法时,变量x具有以下数据:
在第一个unitName中,elementName是值"这是我要比较的值" ...
<unit>
<unitName>This is the value I want to compare</unitName>
<units>
<unit>
<unitName>xxx</unitName>
<units>
<unit>
<unitName>cccc</unitName>
<test>33</test>
<test>44</test>
</unit>
</units>
</unit>
</units>
</unit>
IEnumerable<XElement> tempMemberList = doc.Elements("dep").Descendants("customers").Distinct(new XElementComparer());
public class XElementComparer : IEqualityComparer<XElement> {
public bool Equals(XElement x, XElement y) {
return x.Value == y.Value;
}
public int GetHashCode(XElement x) {
return x.GetHashCode();
}
}
答案 0 :(得分:3)
返回元素的Value
的哈希码是有意义的,因为您正在使用它来确定相等性。您的GetHashCode()
实施必须与Equals()
实施一致。
public class XElementComparer : IEqualityComparer<XElement> {
public bool Equals(XElement x, XElement y) {
return x.Value == y.Value;
}
public int GetHashCode(XElement x) {
return x.Value.GetHashCode();
}
}
答案 1 :(得分:1)
这是解决方案,我只需要从我想要的第一个unitName中获取正确的值...
public class XElementComparer : IEqualityComparer<XElement>
{
public bool Equals(XElement x, XElement y)
{
string unitNameX = x.Element("unitName ").Value;
string unitNameY = y.Element("unitName ").Value;
return unitNameX == unitName Y;
}
public int GetHashCode(XElement x)
{
string val = x.Element("unitName ").Value;
return val.GetHashCode();
}
}
答案 2 :(得分:0)
您还可以编写适用于大多数xml的内容。
public class XElementComparer : IEqualityComparer<XElement>
{
public bool Equals(XElement x, XElement y)
{
return (x.FirstAttribute.Value.Equals(y.FirstAttribute.Value)
&& x.LastAttribute.Value.Equals(y.LastAttribute.Value));
}
public int GetHashCode(XElement x)
{
return x.Value.GetHashCode();
}
}