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

Проверьте этот фрагмент кода из класса 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? Если это лучше, почему бы не разоблачить его для публики?

Ответы

Ответ 1

Реализация этого Set<T> намного проще, чем HashSet<T>, поскольку ему нужно только добавлять и удалять элементы и проверять существование для внутренних процессов LINQ. Он не реализует никаких интерфейсов или не выставляет итераторы и т.д.

Скорее всего, это быстрее для LINQ, для которого он используется.