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, для которого он используется.