IEqualityComparer比较两个复杂的对象

时间:2016-05-04 10:23:13

标签: c# iequalitycomparer

引用我之前的问题Compare two complex list objects

我已经实现了IEqualityComparer来检查我的对象列表是否相等,但它似乎不起作用。任何人都可以帮助找到问题

public class Compare : IEqualityComparer<test>
{
    public bool Equals(test x, test y)
    {
        if (x == null || y == null) return false;

        bool equals = x.ID == y.ID && x.Name == y.Name && x.Remark == y.Remark
            && x.Details == y.Details;
        return equals;
    }
    public int GetHashCode(test codeh)
    {
        return (codeh.ID + codeh.Name + codeh.Remark + codeh.Details).GetHashCode();
    }
} 

我的类对象结构:

[XmlRoot(ElementName = "Details")]
public class Details
{
    [XmlElement(ElementName = "time")]
    public string time { get; set; }
    [XmlElement(ElementName = "duration")]
    public string duration { get; set; }
}

[XmlRoot(ElementName = "Remark")]
public class Remark
{
    [XmlElement(ElementName = "RemarkText")]
    public string RemarkText { get; set; }
    [XmlElement(ElementName = "isRemarkVisible")]
    public Boolean IsRemarkVisible { get; set; }
}

[XmlRoot(ElementName = "test")]
public class test
{
    [XmlElement(ElementName = "ID")]
    public string ID { get; set; }
    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }
    public Details Details { get; set; }
    [XmlElement(ElementName = "Remark")]
    public Remark Remark { get; set; }
}

[XmlRoot(ElementName = "Tests")]
public class Tests
{
    [XmlElement(ElementName = "test")]
    public test[] test { get; set; }
}

我正在尝试比较这里的列表:

List<test> testOldList = (from test in testPrev.test
                              where test.ID == testId.ToString()
                              select test).ToList();
List<test> testNewList = (from test in testnew.test
                          where test.ID == testId.ToString()
                          select test).ToList();
var Comparer = new Compare();
bool bothEqual = new HashSet<Record>(testOldList , Comparer).SetEquals(new HashSet<Record>(testNewList , Comparer));

0 个答案:

没有答案