我需要通过stride y返回一个List来将double []拆分为x个元素的组。很基本...一个循环和/或一些linq和你所有的设置。然而,我没有花太多时间在延伸方法上,这看起来是一些练习的好选择。该天真的版本返回什么,我希望在我的当前应用程序....如何使[示例]扩展方法更通用/功能/高效?
(A)
public static IList<T[]> Split<T>(this IEnumerable<T> source, int every, int take)
{
/*... throw E if X is insane ...*/
var result = source
.Where ((t, i) => i % every == 0)
.Select((t, i) => source.Skip(i * every).Take(take).ToArray())
.ToList();
return result;
}
...返回类型是那种普通的... 取决于您的通用定义。
我想...
(B)
public static IEnumerable<IEnumerable<T>> Split<T>
(this IEnumerable<T> source,int every, int take){/*...*/}
...是一个更好的解决方案......也许。
问题(S):
- 是(B)首选...为什么?
- 你会如何投(乙)
IList <T[]>
? - 重构有什么好处? 可能 两种可能被链接的方法等。
- 该方法的声音?...或有我 错过了一些基本的东西。
评论,意见和苛刻的语言总是赞赏。
占用率背景:C#.NET 4.0
为什么要调用'Cast'而不是简单地移除'ToArray'和'ToList'调用? – jball 2010-09-07 21:00:00
@jball:如果您希望查询热切执行,则存在合法的区别。 – Ani 2010-09-07 21:07:16
@Ani,它似乎违背了LINQ和扩展方法的期望,使得一个急切执行的扩展方法。 – jball 2010-09-07 21:10:11