2

有什么特别的理由有单独的方法SkipSkipWhile,而不是简单地重载相同的方法?

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

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

同样的问题适用于TakeTakeWhile,它们是对上述内容的补充。

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

4

2 回答 2

7

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

于 2013-10-28T14:20:07.090 回答
2

“While”表示 LINQ 只会在 lambda 表达式的计算结果为真时跳过,一旦不再为真,就会停止跳过。这与仅跳过固定数量的项目完全不同。

当然,同样的推理也适用于 Take。

为了清晰起见,一切都很好!

于 2013-10-28T14:21:04.607 回答