Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
IOrderedEnumerable<T> passende Liste gesucht
squadwuschel
myCSharp.de - Member



Dabei seit:
Beiträge: 406
Herkunft: Dresden

Themenstarter:

IOrderedEnumerable<T> passende Liste gesucht

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Femaref
myCSharp.de - Member



Dabei seit:
Beiträge: 253

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
squadwuschel
myCSharp.de - Member



Dabei seit:
Beiträge: 406
Herkunft: Dresden

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

Schau mal in C #: Wie Sie umsetzen IOrderedEnumerable.
Again what learned...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo squadwuschel,
Zitat
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
private Nachricht | Beiträge des Benutzers
squadwuschel
myCSharp.de - Member



Dabei seit:
Beiträge: 406
Herkunft: Dresden

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7561
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Oder um die Frage direkt zu beantworten


List<string> list = /*...*/;
list.OrderBy(s => s);
private Nachricht | Beiträge des Benutzers