LINQ Design Curiosity:Skip / Take vs. SkipWhile / TakeWhile

时间:2013-10-28 14:18:19

标签: c# linq

是否有任何特殊原因要使用单独的方法SkipSkipWhile,而不是简单地使用相同方法的重载?

我的意思是,为什么没有Skip(int)SkipWhile(Func<TSource,bool>)SkipWhile(Func<TSource,int,bool>),而不是Skip(int)Skip(Func<TSource,bool>)Skip(Func<TSource,int,bool>)。 ?我确信它有一些的原因,因为整个LINQ系统是由比我经验丰富的人设计的,但这种推理并不明显。

唯一可能出现的问题是类似SQL语法的解析器问题,但是已经区分了Select(Func<TSource,TResult>)Select(Func<TSource,int,TResult>)之类的东西,所以我怀疑这就是原因。

同样的问题适用于TakeTakeWhile,与上述内容相辅相成。

编辑:为了澄清,我意识到变体之间的功能差异,我只是询问关于方法命名的设计决策。

2 个答案:

答案 0 :(得分:7)

IMO,唯一的原因是更好的可读性Skip听起来像“跳过N条记录”,而SkipWhile听起来像“跳过条件”。这些名称不言自明

答案 1 :(得分:2)

“While”表示LINQ只会在lambda表达式求值为true时跳过并且一旦不再为真,就会停止跳过。这与跳过固定数量的项目完全不同。

当然,Take的理由也是如此。

一切都是为了清晰起见!