2013-06-12 25 views
15

Kiểm tra đoạn mã này từ Linq.Enumerable lớp:nội System.Linq.Set <T> vs System.Collections.Generic.HashSet công <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; 
    } 

Tại sao những kẻ tại Microsoft quyết định sử dụng thực hiện nội bộ này Set và không phải là HashSet thông thường? Nếu nó tốt hơn trong bất kỳ cách nào, tại sao không tiếp xúc với công chúng?

Trả lời

9

Việc triển khai Set<T> này đơn giản hơn nhiều so với HashSet<T> vì nó chỉ cần thêm và xóa các phần tử và kiểm tra sự tồn tại của các quy trình nội bộ LINQ. Nó không thực hiện bất kỳ giao diện nào hoặc hiển thị các trình vòng lặp, v.v.

Vì vậy, có thể nó nhanh hơn cho mục đích LINQ sử dụng nó cho.

Các vấn đề liên quan