Я просто хочу удалить дубликаты из двух списков и объединить их в один список. Мне также нужно иметь возможность определить, что такое дубликат. Я определяю дубликат по свойству 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.
public bool Equals(T x, T y)
, а не методpublic int GetHashCode(T obj)
? - person avanek   schedule 11.05.2011null
, а не пустая последовательность? Это было бы очень странно, так какEnumerable.Union()
никогда не должно возвращатьnull
. - person svick   schedule 11.05.2011