2016-07-03 3 views
1

ただの簡単な質問です。Countは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

とそれはカウントalittlebit怖い:P –

+0

あなたが日常的に使用するほとんどのコレクションは、ICollectionを実装しているため、より速くカウントを得る方法があります。しかし、* Count()* Just *のようなLinqの拡張は、速い方法を見つけようとしていることを知っていることを常に知っておいてください。もし存在しなければ、すべてを繰り返すことになります。 –

関連する問題