Collections

MD1978

Erfahrenes Mitglied
Hallo,
ich möchte mehrere Instanzen einer Klasse in einer Liste verwalten. Ich muss über diese Liste iterieren und ggf. Instanzen aus der Liste entfernen. Was für eine Art von Collection verwende ich dafür am besten?
Mit ArrayList geht es nicht, da man dabei beim Iterieren keine Instanzen aus der Liste löschen darf.

Gruss,

MD
 
Habs nicht ausprobiert, aber versuchs doch mal mit MyClass[] m = new MyClass[10];
Oder wenn das nicht funktioniert mit object[] o = new object[10];

mfg Hitman
 
Sorry, hab deine Frage wohl nicht richtig verstanden. Aber wenn mich nicht alles täuscht, gibt es neben ArrayList (zumindest in .NET 1.1) nicht mehr eine allzu grosse Auswahl an variablen Listen...
 
ich denke mal dein problem ist folgendes:

Code:
ArrayList arrayList = new ArrayList();
// fill arrayList...

foreach(object o in arrayList)
{
 if( ... )
  arrayList.Remove(o); // Fehler
}

Versuch doch mal:

Code:
for(int i = arrayList.Count - 1; i >= 0; --i)
{
 if( ... )
  arrayList.RemoveAt(i);
}
 
MD.... ich wäre dir sehr dankbar, wenn du deine Fragen bitte besser formulieren könntest bzw. eventuell auch Source mitreinpackst, wo dein Problem auftritt (nur den wirklich relevanten Teil). Denn so kann jeder nur raten was genau du brauchst.
Sag ich jetzt deshalb, weil ich bei den meisten deiner Fragen zblöd bin sie zu verstehen ...
 
@Caracho: Danke! Hat mein Problem gelöst.
@Noberbert Eder: Welches Posting ist nicht ausreichend formuliert?


MD
 
Hi.

Wie Caracho schon richtig gestellt hat, das Verändern einer Collection innerhalb eines foreach Blocks ist nicht zulässig, bei keiner Collection, beim iterieren mittels einer normalen for-Schleife und dem Zugriff über Indices ists möglich.

MfG,
Alex
 
Hi,

es ist noch zu erwähnen, dass über die for-Schleife von hinten nach vorne durchlaufen
werden muss, sowie das in meinem obigen Beispiel gezeigt wird.
Ansonsten gibt es Probleme, da sich beim Entfernen eines Eintrags aus der ArrayList die
Elemente jeweils um 1 nach vorne verschieben, was folgendes Beispiel verdeutlicht:

Code:
ArrayList arrayList = new ArrayList();
arrayList.Add("String1");
arrayList.Add("String2");
arrayList.Add("String3");

for(int i = 0; i < arrayList.Count; ++i)
 arrayList.RemoveAt(i);

MessageBox.Show(arrayList[0].ToString()); // gibt String2 aus

nur mal so zur Info.
 

Neue Beiträge

Zurück