Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用foreach方法而不是for方法来删除listbox的方法?_C#_.net_Asp.net - Fatal编程技术网

C# 如何使用foreach方法而不是for方法来删除listbox的方法?

C# 如何使用foreach方法而不是for方法来删除listbox的方法?,c#,.net,asp.net,C#,.net,Asp.net,如何使用第二种方法而不是第一种方法 第一(网络用户控制) Test.aspx(第一次测试) 第二(网络用户控制) Test.aspx(第二次测试) 您可以先将要删除的值放到列表中,然后通过remove函数运行它们。如果需要,可以进一步增强这一点 var removedValues = ItemOrderer2.Items .Where(li => li.Selected) .Select(li => l

如何使用第二种方法而不是第一种方法

第一(网络用户控制)
Test.aspx(第一次测试) 第二(网络用户控制) Test.aspx(第二次测试)
您可以先将要删除的值放到列表中,然后通过remove函数运行它们。如果需要,可以进一步增强这一点

var removedValues = ItemOrderer2.Items
                    .Where(li => li.Selected)
                    .Select(li => li.Value).ToList();

foreach (var removedValue in removedValues) {
   ItemOrderer2.Remove(removedValue);
}

如果要删除
foreach
中的数据,则不能使用
foreach
——它(有意)破坏迭代器

如果的
有效,为什么要更改它?如果您非常想使用
foreach
,请先建立一个单独的列表-例如:

List<ListItem> remove = new List<ListItem>();
foreach(ListItem li in ItemOrdere2.Items) {
    if(li.Selected) remove.Add(li);
}
foreach(ListItem li in remove) {
    ItemOrderer2.Remove(li); // or similar
}
List remove=new List();
foreach(ItemOrdere2.Items中的ListItem li){
如果选择了(li),则删除。添加(li);
}
foreach(删除中的列表项li){
ItemOrder2.Remove(li);//或类似
}

如果可用,第一个查询通常可以通过LINQ简化。

您不能修改在foreach循环中迭代的集合

也就是说,您似乎正在尝试从列表框中删除所选项目。您还可以使用以下内容:

while(ItemOrderer2.SelectedItem != null)
{
    ItemOrderer2.Items.Remove(ItemOrderer2.SelectedItem);
}

嗯,您不能使用foreach对IList进行任何更改,因为它会更改其中的项数

另外,你展示的第一个方法是有缺陷的,因为计数可以从20开始,但是如果你用你的方法删除10个项目,计数仍然是20,你将在IList上出界

基本上,如果您想在迭代时删除/添加内容,您必须执行以下操作

for (int i = 0; i < ListBox1.Items.Count; i++)
{
   if (ListBox1.Items[i].Selected)
   {
      ListBox1.Items.RemoveAt(i)
      i--;
   }
}
for(int i=0;i
注意,如果你移除任何东西。假设选择了项[2],则循环将转到:

  • 如果计数>0,则继续
  • 如果选择了项目[0],请将其删除(不是)
  • 增加我们的计数器
  • 如果计数>1,则继续
  • 如果选择了项目[1],请将其删除(不是)
  • 增加我们的计数器
  • 如果计数>2,则继续
  • 项目[2]已选中,请将其删除(它是)
  • 删除项目[2](现在,以前的项目[3]将成为项目[2]
  • 减少我们的计数器
  • 增加我们的计数器
  • 如果计数>2,则继续
  • 希望这有帮助:)

    var removedValues = ItemOrderer2.Items
                        .Where(li => li.Selected)
                        .Select(li => li.Value).ToList();
    
    foreach (var removedValue in removedValues) {
       ItemOrderer2.Remove(removedValue);
    }
    
    List<ListItem> remove = new List<ListItem>();
    foreach(ListItem li in ItemOrdere2.Items) {
        if(li.Selected) remove.Add(li);
    }
    foreach(ListItem li in remove) {
        ItemOrderer2.Remove(li); // or similar
    }
    
    while(ItemOrderer2.SelectedItem != null)
    {
        ItemOrderer2.Items.Remove(ItemOrderer2.SelectedItem);
    }
    
    for (int i = 0; i < ListBox1.Items.Count; i++)
    {
       if (ListBox1.Items[i].Selected)
       {
          ListBox1.Items.RemoveAt(i)
          i--;
       }
    }