LINQ 设计好奇心:跳过/采取与跳过时/占用时

本文关键字:过时 好奇心 跳过 LINQ | 更新日期: 2023-09-27 18:37:11

是否有任何特殊的理由将方法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,它们是上述补充。

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

LINQ 设计好奇心:跳过/采取与跳过时/占用时

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

"While"表示 LINQ 只会在 lambda 表达式的计算结果为 true 时跳过,并且一旦它不再为 true,就会停止跳过。这与跳过固定数量的项目非常不同。

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

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