我需要通過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