- Registriert
- 24 November 2005
- Beiträge
- 3.121
Möp und Doppelmöp für Sil 
Berufsbedingt muß ich mich nun mit C# auseinandersetzen. Soweit, so gut. Im coden allgemein bin ich eigentlich fit, aber ich hab irgendwie Verständnisprobleme mit IEnumerable<...>, List<...>, Dictionary<..., ...>, SortedList<..., ...>, KeyValuePair<..., ...> und ganz besonders den Zugriffen darauf.
foreach() ist ja ganz lustig, aber wenn ich schon Keybegriffe (teilweise) kenne und eh' nur eine Ergebniszeile zurückerwarte, wie spreche ich dann beispielsweise solche geschachtelten Objekte am elegantesten an?
Beispiel:
So. Ich habe nun also eine Liste (Tabelle) bestehend aus einer doppelt geschachtelten Liste. Die oberste Struktur enthält einige Basisdaten und einen Jahreswert. Die nächste Ebene besteht aus dem KEY pro Jahr und die tiefste Ebene enthält schließlich die KeyValuePairs aus Monat und dem eigentlichen Wert. Wenn ich nun bsp. in einer for()-Schleife die Monatswerte zu _einem_ Key für ein bestimmtes Jahr abloopen möchte, wie gehe ich da am schlauesten vor?
Also, gegeben: Jahr
, Key (key) - gewünscht: Iwas, Monat + Wert in Schleife.
tl;dr:
- Gibt es keine elegantere Möglichkeit ohne foreach() und meterlangen Lambda-Konstrukten auf die Werte zuzugreifen? (Die Abfrage aufs Jahr ist ja noch nichtmal drin
)
- Kennt jemand gute Übungen / gute Literatur zum Thema Listen, Collections, Dictionarys, KeyValuePairs für C#?
Bitte keine Diskussion über C# im Allgemeinen und dem .NET-Framework im Speziellen. Die Diskussionen hatte ich auch schon mit meinem Brötchengeber, mir gefällts auch nicht aber die Alternative wäre ein anderer Brötchengeber^^ Gekauft habe ich mir bisher dies und das. Blöderweise habe ich kaum Zeit zum Lesen :/

Berufsbedingt muß ich mich nun mit C# auseinandersetzen. Soweit, so gut. Im coden allgemein bin ich eigentlich fit, aber ich hab irgendwie Verständnisprobleme mit IEnumerable<...>, List<...>, Dictionary<..., ...>, SortedList<..., ...>, KeyValuePair<..., ...> und ganz besonders den Zugriffen darauf.
foreach() ist ja ganz lustig, aber wenn ich schon Keybegriffe (teilweise) kenne und eh' nur eine Ergebniszeile zurückerwarte, wie spreche ich dann beispielsweise solche geschachtelten Objekte am elegantesten an?
Beispiel:
Code:
public class EntityDataDings : EntityDataElement
{
public EntityDataDings()
{
MonVals = new Dictionary<int, SortedList<int, string>>();
}
public long Blubb { get; set; }
public int Jahr { get; set; }
public Dictionary<int, SortedList<int, string>> MonthVals { get; private set; }
public long Blah { get; set; }
public string Iwas { get; set; }
public string this[int key, int month]
{
get
{
return MonthVals.ContainsKey(key) && MonthVals[key].ContainsKey(month) ? MonthVals[key][month] : String.Empty;
}
set
{
if (!MonthVals.ContainsKey(key))
MonthVals.Add(key, new SortedList<int, string>());
if (MonthVals[key].ContainsKey(month))
MonthVals[key][month] = value;
else
MonthVals[key].Add(month, value);
}
}
}
}
...
List<EntityDataDings> eddlist = new List<EntityDataDings>();
// fülle die Liste mit iwelchen Daten aus der DB
So. Ich habe nun also eine Liste (Tabelle) bestehend aus einer doppelt geschachtelten Liste. Die oberste Struktur enthält einige Basisdaten und einen Jahreswert. Die nächste Ebene besteht aus dem KEY pro Jahr und die tiefste Ebene enthält schließlich die KeyValuePairs aus Monat und dem eigentlichen Wert. Wenn ich nun bsp. in einer for()-Schleife die Monatswerte zu _einem_ Key für ein bestimmtes Jahr abloopen möchte, wie gehe ich da am schlauesten vor?
Also, gegeben: Jahr

Code:
IEnumerable<EntityDataDings> edd = eddlist.Where(x => x.MonthVals.ContainsKey(key)).ToList();
string iwas = (eddlist.Count > 0) ? Convert.ToString((eddlist.Where(x => x.MonthVals.ContainsKey(key)).Select(x => x.Iwas).Single())) : string.Empty;
foreach (EntityDataDings line in eddlist.Where(x => x.MonthVals.ContainsKey(key)))
{
for (int i = 1; i <= line.MonthVals[key].Values.Count; i++)
{
if (!string.IsNullOrEmpty(line[key, i]))
{
// Tue iwas mit i (Monat) und line[key, i].ToString() (Wert)
}
}
}
tl;dr:
- Gibt es keine elegantere Möglichkeit ohne foreach() und meterlangen Lambda-Konstrukten auf die Werte zuzugreifen? (Die Abfrage aufs Jahr ist ja noch nichtmal drin

- Kennt jemand gute Übungen / gute Literatur zum Thema Listen, Collections, Dictionarys, KeyValuePairs für C#?
Bitte keine Diskussion über C# im Allgemeinen und dem .NET-Framework im Speziellen. Die Diskussionen hatte ich auch schon mit meinem Brötchengeber, mir gefällts auch nicht aber die Alternative wäre ein anderer Brötchengeber^^ Gekauft habe ich mir bisher dies und das. Blöderweise habe ich kaum Zeit zum Lesen :/