2009-04-08 76 views
2

我有一個liiitle問題。如何從C#中的列表中刪除元素?

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

例如,

有名單溫度內的兩個List<UInt32>記錄但是,當我嘗試做一些像temp.removeAt(0);它不會刪除第一行(List<UInt32>)。 。 這是爲什麼?我做錯了什麼?

更新

這裏是行不通的代碼。我知道有2 List<UInt32>主力名單中,我知道第一個List<UInt32>.Count是1,但是當我這個代碼後檢查同一位置上,第一個代碼的計數仍是一個。

     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

爲什麼你知道它不會刪除? – Vimvq1987 2009-04-08 15:45:38

回答

3

您要刪除的項目,然後推動我,所以跳過搬進我代表以前的位置的項目。

例如

項= 5 I = 0 - >刪除我 =>項= 4,I = 0

- >我++ =>項= 4,i = 1

- >除去我 =>項= 3,I = 1

- >我++ =>項= 3,I = 2

- >刪除我 =>項= 3,I = 2

- >我++ =>項目= 3,I = 3

- >刪除我=>索引超出範圍

0

我相信它確實將其刪除。

我想檢查計數時,因爲你處理整數列表的列表您正在尋找在錯誤列表...

2

你的問題還不清楚,但它聽起來像你的用戶界面綁定到列表。如果是這樣,您將看不到更改,因爲該列表不支持更改通知。您應該使用BindingList<T>(用於Windows窗體)或ObservableCollection<T>(用於WPF)來獲取更改通知。

1

這是行不通的。

如果在你的「臨時」列表中的兩個表的情況下,這樣做temp.RemoveAt(0);將刪除第一個兩個列表。它將從temp中刪除整個List,而不僅僅是內部列表中的第一個int值。

0

我認爲我們將需要更多的代碼中找出問題。你的描述應該如何工作。

我有下面的代碼在它工作正常。

 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); 

在最後一行,也包含了「1」和「11」已刪除列表中。

需要注意的是移除整個第一列表,而不是僅僅包含數字「1」的項目是非常重要的。

0

我們可能需要看到更多的代碼。脫穎而出的一件事是在你的榜樣行:

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

如果內List<UInt32>只中有1項這種情況纔會得到滿足。您可能不會像您認爲的那樣執行.RemoveAt(0)。我不能確定沒有看到更多的代碼。