EDIT: Ich habe einen entscheidenden Punkt übersehen: .NET 2.0
Betrachten wir den Fall, dass ich eine Liste mit unsortierten Elementen habe, der Einfachheit halber einen Typ wie diesen:
class TestClass
{
DateTime SomeTime;
decimal SomePrice;
// constructor
}
Ich muss eine berichtsähnliche Ausgabe erstellen, in der die Gesamtpreise für jeden Tag kumuliert werden. Es sollte eine Zeile für jeden Artikel geben, gefolgt von den entsprechenden Zusammenfassungszeilen.
Nehmen Sie diese Testdaten:
List<TestClass> testList = new List<TestClass> {
new TestClass(new DateTime(2008,01,01), 12),
new TestClass(new DateTime(2007,01,01), 20),
new TestClass(new DateTime(2008,01,01), 18)
};
Die gewünschte Ausgabe würde in etwa so aussehen:
2007-01-01:
20
Total: 20
2008-01-01:
12
18
Total: 30
Wie kann man solche Szenarien am besten angehen? Im Falle einer solchen Liste würde ich die Schnittstelle IComparable für TestClass implementieren, damit die Liste sortiert werden kann.
Um den Bericht selbst zu erstellen, könnte so etwas verwendet werden (gehen wir davon aus, dass wir Methoden für Aufgaben wie die Akkumulation der Preise, das Verfolgen des aktuellen Datums usw. haben):
for (int i=0;i<testList.Count;i++)
{
if (IsNewDate(testList[i]))
{
CreateSummaryLine();
ResetValuesForNewDate();
}
AddValues(testList[i]);
}
// a final summary line is needed to include the data for the last couple of items.
CreateSummaryLine();
Das funktioniert gut, aber ich habe ein komisches Gefühl, was die zweite "CreateSummaryLines"-Funktion anbelangt.
Wie gehen Sie mit solchen Situationen um (insbesondere in Anbetracht der Tatsache, dass wir mit einer Liste<> von Elementen arbeiten müssen und nicht mit einem vorkategorisierten Wörterbuch oder ähnlichem)?