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
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.
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
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
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
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!"
Oder um die Frage direkt zu beantworten 😉
List<string> list = /*...*/;
list.OrderBy(s => s);