从列表<t>中删除重复项基于Lambda选择的属性</t>

时间:2011-06-27 13:57:34

标签: c# .net linq list

2 个答案:

答案 0 :(得分:2)

您未在compiledFunction实施中使用GetHashCode - 您只是使用项目本身的哈希码。你想要这样的东西:

public int GetHashCode(T obj)
{
    return compiledFunction(obj).GetHashCode();
}

然而:

  • 你应该考虑在预计类型中使你的类具有通用性,考虑(比如说)Func<TElement, TKey>而不仅仅是Func<T, object>
  • 您应该考虑使用EqualityComparer<TKey>来处理空键。

我已经在MiscUtil中使用辅助方法帮助解决了这个问题,所以你可以这样做:

var comparer = ProjectionEqualityComparer<User>.Create(x => x.Name);

然后从lambda表达式中推断出键类型。

答案 1 :(得分:1)

Distinct()是一个LINQ方法,它返回一个没有任何重复的新序列 它不会修改原始列表。