Ich arbeite an einem Problem in C# 2.0/.NET 2.0, wo ich eine Sortedlist habe und alle "Werte" (nicht die "Schlüssel") dieser SortedList nach einem bestimmten suchen will substring und count up wie viele Vorkommen es gibt.Wie führe ich eine FindAll() auf einer IList <T>? (zB SortedList.Values)
Das ist, was ich versuche zu tun:
{
Sortedlist<string,string> mySortedList;
// some code that instantiates mySortedList and populates it with data
List<string> myValues = mySortedList.Values; // <== does not work
int namesFound = myValues.FindAll(ByName(someName)).Count;
}
Natürlich ist dies nicht funktioniert, weil mySortedList.Values eine IList zurück, während „MyValues“ eine Liste ist. Ich habe versucht, den IList so zu "casten", dass er von myValues akzeptiert wird, aber es scheint nicht zu funktionieren.
Natürlich kann ich MySortedList.Values in einer "foreach" -Schleife Schleife, aber ich möchte das nicht wirklich tun.
Hat jemand irgendwelche Vorschläge?
EDIT-1: Ok, nun, es sieht so aus, als gäbe es keine native Möglichkeit, dies einfach zu machen. Ich hatte angenommen, dass ich gerade etwas vermisste, aber anscheinend nicht. Ich denke, ich mache einfach eine "foreach" über die IList.
Danke für das Feedback jeder! Ich habe alle zu 1 gewählt, weil ich dachte, dass das Feedback gut ist. Danke noch einmal! :-)
EDIT-2: Sieht so aus, als hätte CMS die Antwort, nach der ich gesucht habe. Der einzige Nachteil dabei ist (wie Qwertie unterstrichen hat), dass es eine mögliche Leistungseinbuße geben kann, da es darin besteht, alle Werte in eine andere Liste zu kopieren und dann diese Liste von Anfang bis Ende zu durchsuchen. Für kurze Listen ist diese Antwort effektiv. Längere Listen? Nun, das liegt an dir zu entscheiden ...
Ahh, danke! Ich sah etwas. Ich hatte nicht bemerkt, dass IList IEnumerable implementiert. Wenn ich jetzt darüber nachdenke, ergibt das vollkommenen Sinn, aber es ist mir zu dieser Zeit gar nicht in den Sinn gekommen. Das ist die Antwort! Danke CMS! :-) – Pretzel
Bei dieser Lösung sollten die Auswirkungen auf die Leistung beim Kopieren der gesamten Liste berücksichtigt werden. – Qwertie
Scheint mir wie die Möglichkeit, dass dies ein Leistungsproblem ist das kleine Refactoring auf eine andere Methode nicht wert. Erstellen Sie ein neues, möglicherweise großes Objekt, nur um eine einfache Methode aufzurufen? Etwas riechen dort ... – codekaizen