我知道当使用 Linq 的Any()
扩展来确定一个可枚举对象是否至少有一个元素时,它只会消耗一个元素。但这实际上是如何工作的?它是否必须首先将所有项目都投射到可枚举中,还是一次只投射一个,从第一个开始并停在那里?
问问题
188 次
3 回答
4
Any()
工作,IEnumerable<T>
所以不需要演员。它的实现非常简单,它只是遍历枚举并查看是否可以找到任何符合指定条件的元素。
于 2013-02-20T16:49:45.940 回答
2
简单的实现如下所示:
public bool Any<T>(IEnumerable<T> list)
{
using (var enumerator = list.GetEnumerator())
{
return enumerator.MoveNext();
}
}
所以,不需要任何铸造
于 2013-02-20T16:53:57.430 回答
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;
}
没看过选角,但一般。
于 2013-02-20T17:01:23.863 回答