Linq За исключением настраиваемого IEqualityComparer

Я пытаюсь найти разницу между двумя общими списками, как в примере ниже. Несмотря на то, что t1 и t2 содержат одинаковые свойства, они не являются одним и тем же объектом, поэтому мне нужно реализовать IEqualityComparer.

Похоже, это работает с этим примером, но у реального класса есть несколько других свойств, и мне также нужно сделать то же самое с несколькими другими классами.

Так что мне было интересно, изобретаю ли я колесо заново?

Есть ли более простой метод сравнения всех свойств двух объектов? На данный момент мне действительно нужно справиться только с классом, содержащим простые типы, но было бы неплохо, если бы у меня был компаратор, который работал бы с классами, содержащими экземпляры других классов.

void Main()
{
    var t1 = new Sizes { Name = "Test" , Size = 1} ;
    var t2 = new Sizes { Name = "Test" , Size = 1} ;

    var list1 = new List<Sizes>();
    var list2 = new List<Sizes>();
    list1.Add(t1);
    list2.Add(t2);

    var differences = list2.Except(list1 , new SizesComparer());    
    // differences should be empty.
}


public class Sizes  
{
    public string Name { get;  set; }
    public int    Size { get;  set; }
}

public class SizesComparer : IEqualityComparer<Sizes>   
{
    bool IEqualityComparer<Sizes>.Equals(Sizes x, Sizes y)
    {            
        return (x.Name.Equals(y.Name) && x.Size.Equals(y.Size));        
    }

    int IEqualityComparer<Sizes>.GetHashCode(Sizes obj)
    {
        if (Object.ReferenceEquals(obj, null))
            return 0;               

        return obj.Name.GetHashCode() + obj.Size;       
    }
}
28
задан sgmoore 12 August 2011 в 15:05
поделиться