Dämlicher Programmierfehler
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.
Dieser Beitrag wurde durch Björn am 23. März 2010 um 11:30 Uhr erstellt und ist in C# kategorisiert. Jede Reaktion auf diesen Beitrag kannst du mit RSS 2.0 verfolgen. Du kannst eine Antwort oder einen Trackback von deiner eigenen Seite hinterlassen.
- TFS Alerts
- XML serialisierbares Dictionary<TKey,TValue>
- Signieren einer XML-Datei in C#
- Steam lässt sich nicht starten
- Tipp: StringReader und StringWriter
- XSLT Transformation in C#
- Löschen von Nodes in einem XML-Dokument
- Mein persönlicher Coding Style Horror
- HowTo: C# Programm nur mit NotifyIcon ohne Form starten
- Ein Dictionary als DataSource