c# - net - System.Linq.Set interno<T> frente a System.Collections.Generic.HashSet<T> público
iset c# (1)
La implementación de este Set<T>
es mucho más simple que HashSet<T>
ya que solo es necesario agregar y eliminar elementos y verificar la existencia de los procesos internos de LINQ. No implementa ninguna interfaz ni expone iteradores etc.
Así que probablemente sea más rápido para el propósito en que LINQ lo usa.
Echa un vistazo a esta pieza de código de la clase 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;
}
¿Por qué los chicos de Microsoft decidieron usar esta implementación interna de Set
y no el HashSet
normal? Si es mejor de alguna manera, ¿por qué no exponerlo al público?