【发布时间】:2012-06-21 22:37:44
【问题描述】:
我一直在寻找问题Get next N elements from enumerable 的答案,但没有找到任何令人满意的答案,我自己酿造了。我想出的是
IEnumerable<T> Chunk<T, R>(IEnumerable<R> src, int n, Func<IEnumerable<R>, T> action){
IEnumerable<R> head;
IEnumerable<R> tail = src;
while (tail.Any())
{
head = tail.Take(n);
tail = tail.Skip(n);
yield return action(head);
}
}
我真正想要的是让动作默认为t=>t,但我不知道如何将其设为默认参数。签名IEnumerable<T> Chunk<T, R>(IEnumerable<R> src, int n, Func<IEnumerable<R>, T> action = t=>t) 给出了语法错误。
我的问题是,我该怎么做?
我想这与 Specifying a lambda function as default argument 相同,但用于 C# 而不是 C++
顺便说一句,我知道它在语法上没有任何区别,但是如果我切换T 和R 会更容易阅读吗?
【问题讨论】:
-
旁注:是的,我至少会切换它们,并可能将它们重命名为 TSource 和 TResult。 (我认为这样会匹配默认的 LINQ 方法。)
标签: c#