Ich brauchte eine double[] aufgeteilt in Gruppen von x Elemente von stride y Rückgabe einer Liste. Ziemlich einfach ... eine Schleife und / oder einige linq und Ihr alle gesetzt. Allerdings habe ich nicht viel Zeit mit Erweiterungsmethoden verbracht, und dies sah wie ein guter Kandidat für etwas Übung aus. Die naive Version gibt zurück, wonach ich in meiner aktuellen Bewerbung suche....
(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;
}
...der Rückgabetyp ist ziemlich generisch... je nach Ihrer Definition von generisch .
Ich würde denken...
(B)
public static IEnumerable<IEnumerable<T>> Split<T>
(this IEnumerable<T> source,int every, int take){/*...*/}
...ist eine bessere Lösung ...vielleicht.
Frage(n):
- Ist (B) vorzuziehen?...Warum?
- Wie würden Sie (B) besetzen als
IList <T[]>
? - Gibt es einen Vorteil beim Refactoring? möglicherweise zwei Methoden, die verkettet werden können oder ähnliches.
- Ist der Ansatz solide?...oder habe ich etwas Grundlegendes übersehen.
Kommentare, Meinungen und harte Worte sind immer willkommen.
Verwendungskontext: C# .Net 4.0