从IEnumerable中删除一个项目

时间:2013-04-01 19:04:20

标签: c#

我从复选框列表中选择了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);
    }
}

但该项目仍然存在于该列表中。它没有被删除。

2 个答案:

答案 0 :(得分:7)

您正在调用ToList(),它会创建列表,该列表是序列的副本,然后您将其从该列表中删除...但是您就是基本上扔掉了清单。

您应该将原始序列转换为列表,然后删除不需要的值...或者您可以使用Except开头:

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

答案 1 :(得分: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();