c# - 内部 System.Linq.Set<T> 与公共(public) System.Collections.Generic.HashSet<T>

标签 c# linq hashset

检查 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/

相关文章:

c# - ASP MVC 4 MySQL,处理事务错误时遇到问题

C# 调用 mysql sp 过程不正确的整数值

c# - 使用匿名类型的 LINQ GroupBy 工作得比它应该的更好

c# - 使用 LINQ 包含嵌套子级的嵌套

c# - 顶级订单未知的订单列表

java - 当我向 java HashSet 添加一个元素时,所有元素都会发生变化

scala - Scala 中的 SynchronizedSet 和 set 操作

java - 测试 HashSet 时如何仅从循环中获取一个输出

c# - 具有固定键的字典上的多线程

c# - 如何在 C# 中使用 oledb 仅上传 Excel 电子表格的非空行?