2016-07-03 54 views
1

只是一個簡單的問題。計數是否實現IEnumerable

計數是否實現IEnumerable?說你有一個方法可以產生,按照我的理解,這個方法在列舉之前一直處於停滯狀態,但是計數應該需要枚舉它來計數?

回答

4

是的。爲IEnumerable.Count來源是:

public static int Count<TSource>(this IEnumerable<TSource> source) { 
     if (source == null) throw Error.ArgumentNull("source"); 
     ICollection<TSource> collectionoft = source as ICollection<TSource>; 
     if (collectionoft != null) return collectionoft.Count; 
     ICollection collection = source as ICollection; 
     if (collection != null) return collection.Count; 
     int count = 0; 
     using (IEnumerator<TSource> e = source.GetEnumerator()) { 
      checked { 
       while (e.MoveNext()) count++; 
      } 
     } 
     return count; 
    } 

source

如果IEnumerable實際上是澆注到ICollection具有計數的「神奇」的方式,那就用這個來代替迭代。

+0

這是否意味着我可以使用它而不是ToList? –

+0

,並且它讓數字變得可怕:P –

+0

您每天使用的大多數集合實現ICollection,因此可以更快地獲取計數。但是總是很好意識到Linq的擴展如* Count()*只是*嘗試*來找到一個快速的方法,如果沒有的話,最終可能會迭代整個事物。 –