Используя IEqualityComparer для Union

Я просто хочу удалить дубликаты из двух списков и объединить их в один список. Мне также нужно уметь определять, что такое дубликат. Я определяю дубликат свойством ColumnIndex, если они одинаковы, они дублируются. Вот мой подход:

Я нашел отличный пример того, как писать встроенные средства сравнения для случайных случаев, когда они нужны вам только один раз в сегменте кода.

public class InlineComparer<T> : IEqualityComparer<T>
{
    private readonly Func<T, T, bool> getEquals;
    private readonly Func<T, int> getHashCode;

    public InlineComparer(Func<T, T, bool> equals, Func<T, int> hashCode)
    {
        getEquals = equals;
        getHashCode = hashCode;
    }

    public bool Equals(T x, T y)
    {
        return getEquals(x, y);
    }

    public int GetHashCode(T obj)
    {
        return getHashCode(obj);
    }
}

Затем у меня есть два моих списка и я пытаюсь выполнить объединить их с компаратором.

            var formatIssues = issues.Where(i => i.IsFormatError == true);
            var groupIssues = issues.Where(i => i.IsGroupError == true);

            var dupComparer = new InlineComparer<Issue>((i1, i2) => i1.ColumnInfo.ColumnIndex == i2.ColumnInfo.ColumnIndex, 
            i => i.ColumnInfo.ColumnIndex);

            var filteredIssues = groupIssues.Union(formatIssues, dupComparer);

Набор результатов, однако, равен нулю.

Куда я заблуждаюсь? Я уже подтвердил, что в этих двух списках есть столбцы с одинаковыми свойствами ColumnIndex.

13
задан Kiquenet 13 October 2014 в 07:19
поделиться