LINQ MoreThan(谓词,限制)扩展而不是Count(谓词)>限制?

Erw*_*yer 2 .net c# linq comparison operator-keyword

检查IEnumerable集合是否具有多于或少于X个元素以实现谓词的最佳方法是什么?

我目前正在使用,.Count(lambda) <= limit但这使程序不必要地遍历整个集合.

Kir*_*huk 7

您可以使用此表达式:.Skip(limit).Any()等效Count() > limit.但如果你的名单是 ICollection,Count()更可取的.

谓词版本:

public static bool MoreThan<TSource>(this IEnumerable<TSource> source, 
    Func<TSource, bool> predicate, int limit)
{
    int i = 0;

    foreach (var item in source)
    {
        if (predicate(item))
        {
            i++;

            if (i > limit)
            {
                return true;
            }
        }

    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)