Laden...

Suche Collection, bei der man an beliebigen Stellen ohne IndexOutOfRange Werte zuweisen kann

Erstellt von mrwhite vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.484 Views
M
mrwhite Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren
Suche Collection, bei der man an beliebigen Stellen ohne IndexOutOfRange Werte zuweisen kann

Hi,

ich brauch ne Liste von Objekten.

Array kann ich nicht verwenden, weil ich vorher nicht weiß wieviele Elemente reinkommen.

ArrayList lässt mich auch nicht einfach per meineListe[2] = "bla" befüllen.

Index was out of range. Must be non-negative and less than the size of the collection.

Ich brauch ein "Array", in das ich eine Art von Objekten reinwerfen kann, bei dem ich einfach sagen kann array[3] = meinObjekt und das ich einfach per

foreach (meinObjekt obj in array) {
     obj.method()
}

durchlaufen kann.

Gibts das in C#?

danke schonmal

5.742 Beiträge seit 2007
vor 13 Jahren

Ich brauch ein "Array", in das ich eine Art von Objekten reinwerfen kann, bei dem ich einfach sagen kann array[3] = meinObjekt

Du meinst also so eine Art JavaScript-Array?

Kannst du selber schreiben - am einfachsten lässt sich das IMHO mit einem Dictionary<int, [Typ]> nachbauen.

F
155 Beiträge seit 2009
vor 13 Jahren

Hallo,

muss es unbedingt per Index befüllt werden?

Sonst kannst du eine generische Liste verwenden, dieser kannst du einfach mit Add Objekte hinzufügen aber per Indexer auf die Elemente zugreifen.

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

M
mrwhite Themenstarter:in
4 Beiträge seit 2010
vor 13 Jahren

danke für die schnellen antworten.

Ich komm aus der Actionscript-Ecke, da ist so ein Array recht schmerzfrei und flexibel in der Anwendung.
Die C#-Variante find ich echt anstrengend ...
Selber bauen ist natürlich auch ne Idee.
Mal sehen ob ich das hinkriege.

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo mrwhite,

warum selber bauen, wenn es do alles schon gibt. Verwende evtl ne generische liste, dort kannst du auch wie du es gewohn bist mit Indexer [] darauf zugreifen. Auch gibt es dort die Erweiterungsmethode .ToArray.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo mrwhite,

wenn du das wirklich brauchst, wirst du, wie schon von den anderen gesagt, dir da selber was schreiben müssen.

So ganz trivial ist das allerdings nicht. Wenn du intern ein Dictionary<> verwendest, dann musst du aufpassen, den Enumerator korrekt zu implementieren. Wobei man erstmal die Frage klären muss, was korrekt ist, aber da die gewünschte Collection sich ja im Wesentlichen wie ein Array oder eine Liste verhalten soll, würde ein Enummerator sinnvollerweise von 0 an alle Indexwerte bis zum letzten aufsteigend durchlaufen und dabei jeweils das dazugehörige Element liefern, egal ob dieses nun explizit gesetzt wurde oder nicht (in letzterem Fall kann man default(T) zurückgeben). Der Enumerator von Dictionary<> listet ja nur die Elemente auf, die tatsächlich gesetzt wurden. Und das außerdem nicht unbedingt in der Reihenfolge der Indexwerte.

Wenn du dagegen intern eine List<T> verwenden würdest, wäre zwar der Enumerator ganz einfach, dagegen würde das Setzen des einzelnen Elements a[1000000000] für eine mittlere Speicherkatastrophe sorgen. 😃 Ich denke, bei einer Collection, bei der man direkt beliebige Indexwerte ansprechen kann, sollte man immer damit rechnen, dass diese nur sparse besetzt wird. Insofern wäre in internes Dictionary<> wohl letztlich doch die bessere Basis.

herbivore