【发布时间】:2010-06-23 03:00:46
【问题描述】:
我编写了一个自定义 LINQ 扩展方法,该方法将 TakeWhile() 方法扩展为包含性,而不是在谓词为 false 时排除性。
public static IEnumerable<T> TakeWhile<T>(this IEnumerable<T> source, Func<T, bool> predicate, bool inclusive)
{
source.ThrowIfNull("source");
predicate.ThrowIfNull("predicate");
if (!inclusive)
return source.TakeWhile(predicate);
var totalCount = source.Count();
var count = source.TakeWhile(predicate).Count();
if (count == totalCount)
return source;
else
return source.Take(count + 1);
}
虽然这可行,但我相信还有更好的方法。我相当确定这在延迟执行/加载方面不起作用。
ThrowIfNull()是ArgumentNullException检查的扩展方法
社区可以提供一些提示或重写吗? :)
【问题讨论】:
标签: c# linq refactoring