LINQ 设计好奇心:跳过/采取与跳过时/占用时
本文关键字:过时 好奇心 跳过 LINQ | 更新日期: 2023-09-27 18:37:11
是否有任何特殊的理由将方法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
,它们是上述补充。
编辑:澄清一下,我知道变体之间的功能差异,我只是询问有关方法命名的设计决策。
IMO,唯一的原因是更好的可读性。 Skip
听起来像"跳过 N 条记录",而SkipWhile
听起来像"跳过直到满足条件"。这些名称不言自明
"While"表示 LINQ 只会在 lambda 表达式的计算结果为 true 时跳过,并且一旦它不再为 true,就会停止跳过。这与跳过固定数量的项目非常不同。
当然,同样的推理也适用于Take。
为了清楚起见,一切都很好!