Laden...

IOrderedEnumerable<T> passende Liste gesucht

Erstellt von squadwuschel vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.817 Views
S
squadwuschel Themenstarter:in
406 Beiträge seit 2007
vor 12 Jahren
IOrderedEnumerable<T> passende Liste gesucht

Hio,

bin gerade etwas "hilflos" und weiß nicht so genau wonach ich suchen soll.

Ich habe eine Variable die vom Typ IOrderedEnumerable ist die ich initialisieren möchte, aber nicht mit einer Liste die nen Key und nen Value hat wie die SortedList,

Sondern würde die gerne Initialisieren wie IEnumerable mit New List<T>(), einer einfachen Liste der ich dann wieder Werte hinzufügen kann, ist das möglich und wenn ja mit welcher Liste.

z.B.:

das geht: IEnumerable<string> test = new List<string>();
wie geht das: IOrderedEnumerable<string> = ?

thx much squadwuschel

Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime

F
240 Beiträge seit 2006
vor 12 Jahren

Einem IOrderedEnumerable kannst du nichts hinzufügen, es ist eine sortierte Sequenz. Du kannst natürlich über List<T> l = new List<T>(input) eine Liste draus machen, allerdings ist diese nicht mehr sortiert.

S
squadwuschel Themenstarter:in
406 Beiträge seit 2007
vor 12 Jahren

Hio,

ein new List<T>() kann man leider nicht draus machen, da bringt er direkt einen Fehler.

hatte auf ein Pendant gehofft wies die List<T> für IEnumerable, damit ich der Auflistung dann auch was hinzufügen kann, muss ja gehen hoffe ich mal 😃

thx much squadwuschel

Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime

916 Beiträge seit 2008
vor 12 Jahren

Again what learned...

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo squadwuschel,

ein new List<T>() kann man leider nicht draus machen, da bringt er direkt einen Fehler.

welchen? Wobei du den eigentlich selber lösen solltest. Siehe [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).

Ansonsten sollte es mit einer List problemlos gehen. In der MSDN des Interfaces gibts ja ein Beispiel mit Array. Einen extra Key muss es in der Liste nicht geben. Was als Sortierkriterium (Key) verwendet wird, kannst du (am elegantesten als Lambda-Ausdruck) frei angeben (also insbesondere kannst du angeben, dass als Keys die Liststenelemente selbst verwendet werden.

Ob aber nun eine Änderung an der originalen Liste auf das z.B. durch OrderBy gewonnene IOrderedEnumerable-Objekt durchschlägt, steht auf einem anderen Blatt und glaubs eher nicht.

Was du genau willst, ist mir aber ehrlich gesagt nicht klar geworden.

Wenn es dir nur darum geht, dass du eine Liste hast, die ständig sortiert ist, kannst du auch einfach List<T> nehmen. Du musst eben nur die neuen Elemente an der richtigen Stellen einfügen. Um die richtige Stelle zu finden, kannst du List<T>.BinarySearch verwenden.

Sich auf Basis von ICollection<T> eine Liste zu schreiben, die in der Add-Methode automatisch BinarySearch verwendet, ist auch keine große Klippe.

herbivore

S
squadwuschel Themenstarter:in
406 Beiträge seit 2007
vor 12 Jahren

Hio,

Danke für die ausführliche Antwort.

Fehler ist vielleicht falsch ausgedrückt wenn ich versuche

IOrderedEnumerable<Myclass> Test = New List<Myclass>();

Zu erstellen geht das schon nicht weil vs einen "Syntaxfehler" bringt, das der Typ nicht stimmt.

Habe das ursprüngliche Problem inzwischen umgehen können, so dass ich das oben genannte nicht mehr benötige, aber interessieren würde es mich schon warum es keinen Listentypen gibt mit dem ich das Interface initialisieren kann.

Tax much squadwuschel

Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

IOrderedEnumerable<T> ist einfach das Ergebnis der Erweiterungsmethode Enumerable.OrderBy (also von Linq). Das kannst du dir mit dem Reflektor auch anschauen - und die (halb) offene Frage von herbivore ab die Sortierung aktualisiert wird beantworten (ich glaubs auch nicht da ein "Snapshot" von der zu grunde liegenden IEnumerabl<T> erstellt wird - denke ich mal).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

5.742 Beiträge seit 2007
vor 12 Jahren

Oder um die Frage direkt zu beantworten 😉


List<string> list = /*...*/;
list.OrderBy(s => s);