检查 Linq.Enumerable
类中的这段代码:
static IEnumerable<TSource> DistinctIterator<TSource>(IEnumerable<TSource> source, IEqualityComparer<TSource> comparer) {
Set<TSource> set = new Set<TSource>(comparer);
foreach (TSource element in source)
if (set.Add(element)) yield return element;
}
为什么 Microsoft 的人决定使用 Set
的这个内部实现而不是常规的 HashSet
?如果它在任何方面都更好,为什么不向公众公开呢?
最佳答案
这个Set<T>
的实现远比 HashSet<T>
简单因为它只需要添加和删除元素并检查 LINQ 内部进程是否存在。它不实现任何接口(interface)或公开迭代器等。
所以对于 LINQ 使用它的目的来说,它可能更快。
关于c# - 内部 System.Linq.Set<T> 与公共(public) System.Collections.Generic.HashSet<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17060939/