Grad bestimmt 20 Minuten bei der Fehlersuche drauf gegangen. Folgender Code:


List<int> _list = new List<int>();
_list.Add(1);
_list.Add(2);
_list.Add(3);
_list.Add(4);

for(int i = 1; i <= 3; i++) {
   int x = _list[i];
   _list.Remove(x);
}

Mein Code war natürlich nicht mit Integerwerten. Ich musste noch ein paar andere Sachen machen, daher war ein RemoveRange() nicht möglich.
Nun wer findet den Fehler?

Ich liste es einfach mal auf:

Durchlauf: 1 - Lösche Element 1 - Rest 2
Durchlauf: 2 - Lösche Element 2 - Rest 1
Durchlauf: 3 - Lösche Element 3 - Rest 0

Beim letzten Durchlauf wird er immer Probleme kriegen. Das Element gibt es nicht mehr. Durch Remove() rücken die Elemente in der Indizierung nach.
Es müsste also heißen:

Durchlauf: 1 - Lösche Element 1 - Rest 2
Durchlauf: 2 - Lösche Element 1 - Rest 1
Durchlauf: 3 - Lösche Element 1 - Rest 0

oder in C#-Code:

for(int i = 1; i <= 3; i++) {
   int x = _list[1];
   _list.Remove(x);
}

Vor allem wenn man in den Debugger schaut, kamen da merkwürdige Werte raus.
Ich sehe, dass die Methode “DeleteEntries()” mit dem Count-Parameter 2 aufgerufen wird, oben zeigt mir der Debugger aber 1 an. Liegt daran, dass in der Liste bereits ein Element entfernt wurde. Somit ist also, wenn man es genau nimmt, beides richtig.