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