Internal System.Linq.Set<T> vs public System.Collections.Generic.HashSet<T>

旧时模样 提交于 2019-12-05 10:58:38

问题


Check out this piece of code from Linq.Enumerable class:

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; 
    }

Why did the guys at Microsoft decided to use this internal implementation of Set and not the regular HashSet? If it's better in any way, why not exposing it to the public?


回答1:


The implementation of this Set<T> is far simpler than HashSet<T> as it is only needs to add and remove elements and check for existence for LINQ internal processes. It does not implement any interfaces or expose iterators etc.

So probably it is faster for the purpose LINQ uses it for.



来源:https://stackoverflow.com/questions/17060939/internal-system-linq-sett-vs-public-system-collections-generic-hashsett

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!