Enumerable.FirstOrDefault()在找到项目时停止吗?

Nik*_*wal 0 c# linq vb.net ienumerable

我尝试在MSDN,SO和Web上搜索,但找不到答案.

说我有一个我喜欢的收藏品FirstOrDefault().我们说它找到了这个项目.它会停止并返回该项目还是继续搜索并阻碍性能?

cuo*_*gle 6

如果你对此仍然含糊不清,那么.NET框架中的源代码就是从这里实现的:

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source) {
    if (source == null) throw Error.ArgumentNull("source");
    IList<TSource> list = source as IList<TSource>;
    if (list != null) {
        if (list.Count > 0) return list[0];
    }
    else {
        using (IEnumerator<TSource> e = source.GetEnumerator()) {
            if (e.MoveNext()) return e.Current;
        }
    }
    return default(TSource);
}

public static TSource FirstOrDefault<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 element in source) {
        if (predicate(element)) return element;
    }
    return default(TSource);
}
Run Code Online (Sandbox Code Playgroud)

显然,如果成立,它将停止