2013-04-01 60 views
1

刪除一個項目我有字符串類型的IEnumerable從複選框列表中選擇項目如下:自IEnumerable

var list1 = chkboxlist.Items.Cast<ListItem>().Where(item => item.Selected == true).Select(item => item.Value); 

if (list1.Contains("4")) 
{ 
    //then remove that item from the list like 

    for (int i = list1.Count() - 1; i >= 0; i--) 
    { 
     if (list1.ElementAt(i) == "4") list1.ToList().RemoveAt(i); 
    } 
} 

但仍項目在該列表中存在。它不會被刪除。

回答

7

你打電話ToList()這將創建一個新的名單這是序列的副本,然後你從列表中刪除......但你那麼基本上丟掉列表。

你應該原始序列轉換到一個列表和然後刪除不需要的價值...或者你可以只使用Except入手:

var list1 = chkboxlist.Items 
         .Cast<ListItem>() 
         .Where(item => item.Selected) 
         .Select(item => item.Value) 
         .Except(new[] { "4" }); 
3

如果你把枚舉到一個列表起來前面,你可以刪除該項目:

var list1 = chkboxlist.Items.Cast<ListItem>() 
         .Where(item => item.Selected == true) 
         .Select(item => item.Value) 
         .ToList(); 

話雖這麼說,你可以只排除項第一:

var list1 = chkboxlist.Items.Cast<ListItem>() 
         .Where(item => item.Selected == true && item.Value != "4") 
         .Select(item => item.Value) 
         .ToList(); 
+0

我不想刪除內容,因爲我需要添加一些條件,如果我的列表包含「4」 – user1882705

+0

@ user1882705正如我所提到的,你可以先將它轉換爲列表,然後你可以刪除... –