0

我知道当使用 Linq 的Any()扩展来确定一个可枚举对象是否至少有一个元素时,它只会消耗一个元素。但这实际上是如何工作的?它是否必须首先将所有项目都投射到可枚举中,还是一次只投射一个,从第一个开始并停在那里?

4

3 回答 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 回答