Count是否实现了一个IEnumerable
Does Count realize a IEnumerable
只是一个简单的问题。
计数是否实现了IEnumerable?假设你有一个方法 yield,根据我的理解,该方法在被枚举之前处于静止状态,但是一个计数应该需要枚举它才能得到计数?
是的。 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
实际上可以转换为具有 "magic" 计数方式的 ICollection
,那么它将使用它而不是迭代。
只是一个简单的问题。
计数是否实现了IEnumerable?假设你有一个方法 yield,根据我的理解,该方法在被枚举之前处于静止状态,但是一个计数应该需要枚举它才能得到计数?
是的。 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
实际上可以转换为具有 "magic" 计数方式的 ICollection
,那么它将使用它而不是迭代。