Aufruf:
MyList.AddSorted(newItem, x => x.PROPERTY);
Ziel:
In die Liste MyList soll das Element newItem eingefügt werden.
Und zwar an die "richtige" Stelle. (alphabetisch bei String, numerisch bei Zahl, etc.)
Der Lambda-Ausdruck gibt an, welche Eigenschaft (PROPERTY) des Objekts mit CompareTo() verglichen werden soll.
Annahme:
Es handelt sich um eine vorsortierte Liste.
Beispiel:
In Liste { 1, 3, 5 } wird 4 hinzugefügt, dann wird sie zu { 1, 3, 4, 5 }.
(Bezogen auf die Werte in der angegebenen Eigenschaft.)
Lösungsansatz:
Eine Erweiterung des Listen-Klassentyps (z. B. ObservableCollection).
public static void AddSorted<TSource, TKey>(this IList<TSource> list, TSource item, Func<TSource, TKey> keySelector)
{
Int32 insertPosition = list.Count; // by default add to the end
if (item.PROPERTY is IComparable<TSource>)
{
for (Int32 i = 0; i < list.Count; i++)
{
if (list[i].PROPERTY.CompareTo(item.PROPERTY) > 0)
{
insertPosition = i;
break;
}
}
}
list.Insert(insertPosition, item);
}
Mein Problem:
Wie schreibt man den Code, daß auf die im Lambda-Ausdruck angegebene Eigenschaft zugegriffen wird?
Der String PROPERTY im Code ist ein Platzhalter.
Ich habe schon eine Weile im Netz und im Forum gesucht. Und auch Herumprobiert. Leider fand ich keine Lösung.
Über eine hilfreiche Antwort würde ich mich freuen.
P.S.
SortedList<> ist für mich keine Option, da ich es für eine ObservableCollection brauche.
Außerdem möchte ich in Sachen Technologie dazulernen.