mike01010
mike01010

Reputation: 6078

Does LinQ Any() cast all items in a collection?

I know when Linq's Any() extension is used to determine if an enumerable has at least one element it will only consume a single element. But how does that work actually? Does it have to cast all items in the enumerable first, or does it just cast them one at a time, starting with the first and stopping there?

Upvotes: 0

Views: 224

Answers (3)

Ken Kin
Ken Kin

Reputation: 4703

Code in the public static class 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;
}

Not seen the casting, but generic.

Upvotes: 1

cuongle
cuongle

Reputation: 75316

Simple implementation looks like:

public bool Any<T>(IEnumerable<T> list)
{
    using (var enumerator = list.GetEnumerator())
    {
        return enumerator.MoveNext();
    }
}

So, no any casting required

Upvotes: 2

Jonathan Wood
Jonathan Wood

Reputation: 67283

Any() works on an IEnumerable<T> so no cast is required. It's implementation is very simple, it simply iterates through the enumerable and sees if it can find any elements matching the specified criteria.

Upvotes: 4

Related Questions