答案 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方法,它返回一个没有任何重复的新序列
它不会修改原始列表。