Сравнение объектов в списках

Задача: есть два списка объектов одного типа. Объекты могут повторяться. Нужно взять из второго списка только те объекты, которых нет в первом.

var newArticles = allArticles.Except(oldArticles, new ArticleEqualityComparer());

ArticleEqualityComparer реализован по примеру с MSDN:
http://msdn.microsoft.com/ru-ru/library/ms132151.aspx

class BoxEqualityComparer : IEqualityComparer
{

    public bool Equals(Box b1, Box b2)
    {
        if (b1.Height == b2.Height & b1.Length == b2.Length
                            & b1.Width == b2.Width)
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    public int GetHashCode(Box bx)
    {
        int hCode = bx.Height ^ bx.Length ^ bx.Width;
        return hCode.GetHashCode();
    }

}


И еще пример для сравнения списков в списках
http://social.msdn.microsoft.com/Forums/en-US/2ff3016c-bd61-4fec-8f8c-7b6c070123fa/c-compare-two-lists-of-objects

public class ListComparer : IEqualityComparer<List>
{
    IEqualityComparer itemComparer;
    public ListComparer()
    {
        itemComparer = EqualityComparer.Default;
    }

    public ListComparer(IEqualityComparer innerComparer)
    {
        itemComparer = innerComparer;
    }

    public bool Equals(List x, List y)
    {
        return x.SequenceEqual(y, itemComparer);
    }

    public int GetHashCode(List obj)
    {
        int somePrimeNumber = 37;

        int result = 1;
        foreach (T item in obj.Take(5))
        {
            result = (somePrimeNumber * result) + itemComparer.GetHashCode(item);
        }

        return result;
    }
}

Вызов:

List<List> first = new List<List>()
{
    new List{"1", "2"},
    new List{"a", "b"}
}; 
            
List<List> second = new List<List>()
{
    new List{"1", "2"},
    new List{"a", "b"}
};

bool areEqual = first.SequenceEqual(second, new ListComparer());

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *