是否有任何特殊原因要使用单独的方法Skip
和SkipWhile
,而不是简单地使用相同方法的重载?
我的意思是,为什么没有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>)
之类的东西,所以我怀疑这就是原因。
同样的问题适用于Take
和TakeWhile
,与上述内容相辅相成。
编辑:为了澄清,我意识到变体之间的功能差异,我只是询问关于方法命名的设计决策。
答案 0 :(得分:7)
IMO,唯一的原因是更好的可读性。 Skip
听起来像“跳过N条记录”,而SkipWhile
听起来像“跳过条件”。这些名称不言自明
答案 1 :(得分:2)
“While”表示LINQ只会在lambda表达式求值为true时跳过,并且一旦不再为真,就会停止跳过。这与跳过固定数量的项目完全不同。
当然,Take的理由也是如此。
一切都是为了清晰起见!