2013-06-12 4 views
15

Dai un'occhiata a questo pezzo di codice da Linq.Enumerable classe:interno System.Linq.Set <T> vs System.Collections.Generic.HashSet pubblico <T>

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

Perché i ragazzi di Microsoft ha deciso di utilizzare questa implementazione interna di Set e non il normale HashSet? Se è meglio in ogni caso, perché non esporlo al pubblico?

risposta

9

L'implementazione di questo Set<T> è molto più semplice di HashSet<T> in quanto è solo necessario aggiungere e rimuovere elementi e verificare l'esistenza dei processi interni LINQ. Non implementa alcuna interfaccia o esporre iteratori, ecc.

Quindi probabilmente è più veloce per lo scopo per cui LINQ lo utilizza.