2009-04-08 21 views
2

Ich habe ein liitle Problem.Wie entferne ich das Element aus der Liste in C#?

Es gibt

List<List<UInt32>> temp = new List<List<UInt32>>(); 

Zum Beispiel

gibt es zwei List<UInt32> Datensätze innerhalb der Liste Temp jedoch, wenn ich versuche, so etwas wie temp.removeAt(0); zu tun, ist es nicht die erste Zeile (List<UInt32>) zu entfernen. . Warum das? Tue ich etwas falsch?

aktualisieren

Hier ist der Code, der nicht funktioniert. Ich weiß, es gibt 2 List<UInt32> in der Hauptliste und ich weiß, dass die erste List<UInt32>.Count ist 1, aber wenn ich die gleiche Position nach diesem Code überprüfen, ist der erste Code Count noch eins.

     int i = 0; 
         bool boolA = true; 

         while (boolA) 
         { 
          if (temp[i].Count == 1) 
          { 
           temp.RemoveAt(i); 
           temps++; 
          } 

          if (i == temp.Count - 1) boolA = false; 
          i++; 
+0

warum wissen Sie, dass es nicht entfernt? – Vimvq1987

+0

überprüfen Update pls – Skuta

+0

Dieses Fragment des Codes macht keinen Sinn. Worum geht es in Ihren Listen? – Lucero

Antwort

3

Sie entfernen Elemente, dann vorrücken ich, überspringen daher das Element, das in die vorherige Position verschoben, die ich vertreten.

z.B.

items = 5 i = 0 -> entfernen i => Produkte = 4, i = 0

-> i ++ => Produkte = 4, i = 1

-> entfernen i = > Produkte = 3, i = 1

-> i ++ = > Produkte = 3, i = 2

-> entfernen i = > Produkte = 3, i = 2

-> i ++ => items = 3, i = 3

-> entfernen i => Index außerhalb des zulässigen Bereichs

0

Ich glaube, es entfernt es.

Ich glaube, Sie an der falschen Liste suchen, wenn die Zählung überprüft, da Sie mit einer Liste von Listen von ganzen Zahlen zu tun hat ...

2

Ihre Frage unklar ist, aber es klingt wie Ihre Benutzeroberfläche gebunden an die Liste. In diesem Fall werden keine Änderungen angezeigt, da die Liste die Änderungsbenachrichtigung nicht unterstützt. Sie sollten eine BindingList<T> (für Windows Forms) oder ObservableCollection<T> (für WPF) verwenden, um Änderungsbenachrichtigung zu erhalten.

1

Das funktioniert.

Wenn sich zwei List-Instanzen in Ihrer "temp" -Liste befinden, wird durch Ausführen von temp.RemoveAt(0); die erste der beiden Listen entfernt. Dadurch wird die gesamte Liste von temp entfernt, nicht nur der erste int-Wert in der internen Liste.

0

Ich denke, wir werden mehr von Ihrem Code benötigen, um das Problem herauszufinden. Was dein Beschreiben sollte funktionieren.

Ich hatte den folgenden Code bei es funktionierte korrekt.

 List<UInt32> a = new List<UInt32>(); 
     a.Add(1); 
     a.Add(11); 

     List<UInt32> b = new List<UInt32>(); 
     b.Add(2); 
     b.Add(22); 

     List<UInt32> c = new List<UInt32>(); 
     c.Add(3); 
     c.Add(33); 

     List<List<UInt32>> temp = new List<List<UInt32>>(); 
     temp.Add(a); 
     temp.Add(b); 
     temp.Add(c); 

     temp.RemoveAt(0); 

In der letzten Zeile wurde die Liste entfernt, die "1" und "11" enthielt.

Es ist wichtig zu beachten, dass die gesamte erste Liste entfernt wurde und nicht nur das Element, das die Nummer "1" enthielt.

0

Wir brauchen mehr von Ihrem Code zu sehen. Eine Sache, die auffällt, ist die Linie in Ihrem Beispiel:

if (temp[i].Count == 1) 

Diese Bedingung wird nur dann erfüllt werden, wenn die inneren List<UInt32> nur 1 Punkt hat in ihm. Sie können die .RemoveAt(0) nicht ausführen, wie Sie denken, dass Sie sind. Ich kann nicht sicher sagen, ohne mehr Code zu sehen.

Verwandte Themen