Laden...

System.InvalidOperationException bei MoveNext() in foreach mit ArrayList

Erstellt von kolli vor 16 Jahren Letzter Beitrag vor 15 Jahren 5.515 Views
K
kolli Themenstarter:in
80 Beiträge seit 2007
vor 16 Jahren
System.InvalidOperationException bei MoveNext() in foreach mit ArrayList

Hi,

ich habe eine foreach-Schleife, die alle Elemente eines bestimmten Typs (in meinem Fall sind alle Elemente vom gleichen Typ) in einer array-List durchgeht und jeweils etwas ausliest.

SharpDevelop gibt mir aber immer folgende Meldung aus:
"Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden."
(System.InvalidOperationException bei MoveNext())

Nun frage ich mich, wie beim Auslesen die ArrayList verändert werden kann.

Die ArrayList entsteht folgendermaßen:
Eine Datei wird nach und nach ausgelesen und in ein von mir selbst angelegtes struct geschrieben. Die structs werden jeweils der ArrayList angehängt.

Danach soll per foreach jedes Element durchgegangen werden und eine Variable des structs angezeigt werden.

Das funktioniert mit allen Dateien gut. Nur mit einer einzigen nicht. Wenn es aber an der Datei liegen würde, müsste aber doch schon ein Fehler beim erstellen der ArrayList auftreten (also beim Auslesen der Datei und schreiben der Werte ins ArrayList).
Der Fehler tritt aber erst beim Auslesen der ArrayList auf.
Und da wird definitiv nichts mehr geändert (was eine foreach-Schleife ja auch verbieten würde).

Hat einer eine Idee, was es genau mit diesem Fehler auf sich hat?

M
1.439 Beiträge seit 2005
vor 16 Jahren

Zeig mal deinen Code zum auslesen.
Btw.: structs und ArrayList sind eher kontraproduktiv; verwende lieber Klassen.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo kolli,

naja, ziemlich sicher änderst du die Auflistung oder eins ihrer Elemente eben doch.

herbivore

A
14 Beiträge seit 2008
vor 15 Jahren

Ich habe genau das gleiche Problem, allerdings will ich das Array auslesen. foreach geht ja leider nicht, wie ich gerade lese. wie kann man denn auf einem String oder andere Elemente zugreifen?
PS: Diese Sprache ist echt merkwürdig. Hier geht ne menge nicht 😄 in PHP kann ich problemlos array mit unterschiedlichsten Informationen Füllen und auslesen.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// erweiterung
using System.Collections;

namespace array
{
	class Program
	{
		static void Main(string[] args)
		{
			ArrayList arrayListe = new ArrayList(1);
			arrayListe.Add(10);
			arrayListe.Add("zehn");

			foreach(int i in arrayListe)
				Console.Write(i);
		}
	}
}


W
123 Beiträge seit 2008
vor 15 Jahren

Hallo alpha_c,

foreach geht schon, wenn du die Auflistung bzw. Elemente davon nicht änderst. Reines Auslesen ist kein Problem. C# ist eine typisierte Sprachen. Daten müssen entsprechend gecastetet oder umgewandelt werden.


foreach(object o in arrayListe)
{
    try
    {
        int n = (int)o;  // Casting für Werttypen
        Console.WriteLine(n);
        continue;
    }
    catch( InvalidCastException e ) { }
    
    string s = o as string; // Casting für Objekte
    
    if( s != null )
    {
        Console.WriteLine(s);
        continue;
    }
    
    // usw.
}

Gruß
wolpertinger

Gelöschter Account
vor 15 Jahren

Seit .Net 2.0 verwendet man keine Arraylist mehr, da es nun die generische Liste 'List<T>' gibt. Die generische 'List<T>' bietet nicht nur performancevorteile, sondern auch typsicherheit. Bitte schau mal in der MSDN nach 'List<T>' um ein beispiel und dessen verwendung zu finden. Man macht sich auch beim Programmieren das leben leichter wenn man die 'List<T>' verwendet. Siehe auch List<T> statt ArrayList?