我知道当Linq的Any()
扩展用于确定一个枚举是否至少有一个元素时,它只会消耗一个元素。但这实际上是如何运作的?是否必须首先将所有项目投射到可枚举中,或者是否一次只投出一个项目,从第一个开始并停在那里?
答案 0 :(得分:4)
Any()
适用于IEnumerable<T>
,因此不需要演员表。它的实现非常简单,它只是遍历可枚举,并查看它是否可以找到符合指定条件的任何元素。
答案 1 :(得分:2)
简单实现如下:
public bool Any<T>(IEnumerable<T> list)
{
using (var enumerator = list.GetEnumerator())
{
return enumerator.MoveNext();
}
}
所以,不需要任何演员
答案 2 :(得分:1)
公共静态类Enumerable
中的代码:
public static bool Any<TSource>(this IEnumerable<TSource> source) {
if(source==null) {
throw Error.ArgumentNull("source");
}
using(IEnumerator<TSource> enumerator=source.GetEnumerator()) {
if(enumerator.MoveNext()) {
return true;
}
}
return false;
}
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if(source==null) {
throw Error.ArgumentNull("source");
}
if(predicate==null) {
throw Error.ArgumentNull("predicate");
}
foreach(TSource local in source) {
if(predicate(local)) {
return true;
}
}
return false;
}
没见过铸造,但是通用。