C# 使用foreach using listbox从列表中删除选定项
我正在尝试使用此方法,该方法是通过单击按钮运行的,该按钮将从列表框中检索选择项,然后从列表中删除此项。无论何时运行代码,都会出现以下错误: “此枚举数绑定到的列表已被修改。仅当列表未更改时,才能使用枚举数。” 我完全被难住了C# 使用foreach using listbox从列表中删除选定项,c#,C#,我正在尝试使用此方法,该方法是通过单击按钮运行的,该按钮将从列表框中检索选择项,然后从列表中删除此项。无论何时运行代码,都会出现以下错误: “此枚举数绑定到的列表已被修改。仅当列表未更改时,才能使用枚举数。” 我完全被难住了 public void DeleteSale() { foreach (BootSale b in lstBootSales.SelectedItems) { lstBootSales.Items.R
public void DeleteSale()
{
foreach (BootSale b in lstBootSales.SelectedItems)
{
lstBootSales.Items.Remove(b.Id);
lstBootSales.Items.Remove(b.Date);
DisplayAllBootSales();
}
}
DisplayAllBootSales()代码>之后只刷新列表框值
我有一个“BootSale”列表,其中存储了写入列表框的信息。我希望能够单击列表框中的项目,然后单击删除,它将从系统中完全删除。错误消息说明了一切。无法从正在迭代的列表中删除项。必须删除foreach
循环之外的项。一个简单的解决方法是使用常规的for
循环。错误消息说明了一切。无法从正在迭代的列表中删除项。必须删除foreach
循环之外的项。一个简单的解决方法是使用常规的来代替循环。执行以下操作:
class Foo {
BootSaleList bootsalelist;
public void DeleteSale()
{
foreach (BootSale b in lstBootSales.SelectedItems.OfType<BootSale>().ToArray())
{
//temp.Remove(b); -- no more of this guy
bootsalelist.ReturnList().Remove(b);
lstBootSales.Items.Remove(b);
// and no more of these guys:
//lstBootSales.Items.Remove(b.Id);
//lstBootSales.Items.Remove(b.Date);
//DisplayAllBootSales();
}
}
}
class-Foo{
BootSaleList BootSaleList;
公开发售()
{
foreach(lstBootSales.SelectedItems.OfType().ToArray()中的BootSale b)
{
//临时搬家(b);--别再找这个家伙了
bootsalelist.ReturnList().Remove(b);
lstBootSales.Items.Remove(b);
//不再有这些家伙了:
//lstBootSales.Items.Remove(b.Id);
//lstBootSales.Items.Remove(b.Date);
//DisplayAllBootSales();
}
}
}
其中:
[Serializable]
public class BootSaleList : IDisplay
{
private List<BootSale> bootsales;
public List<BootSale> ReturnList()
{
return bootsales;
}
}
[可序列化]
公共类BootSaleList:IDisplay
{
私人清单销售;
公共列表返回列表()
{
退货销售;
}
}
它将完美地工作执行以下操作:
class Foo {
BootSaleList bootsalelist;
public void DeleteSale()
{
foreach (BootSale b in lstBootSales.SelectedItems.OfType<BootSale>().ToArray())
{
//temp.Remove(b); -- no more of this guy
bootsalelist.ReturnList().Remove(b);
lstBootSales.Items.Remove(b);
// and no more of these guys:
//lstBootSales.Items.Remove(b.Id);
//lstBootSales.Items.Remove(b.Date);
//DisplayAllBootSales();
}
}
}
class-Foo{
BootSaleList BootSaleList;
公开发售()
{
foreach(lstBootSales.SelectedItems.OfType().ToArray()中的BootSale b)
{
//临时搬家(b);--别再找这个家伙了
bootsalelist.ReturnList().Remove(b);
lstBootSales.Items.Remove(b);
//不再有这些家伙了:
//lstBootSales.Items.Remove(b.Id);
//lstBootSales.Items.Remove(b.Date);
//DisplayAllBootSales();
}
}
}
其中:
[Serializable]
public class BootSaleList : IDisplay
{
private List<BootSale> bootsales;
public List<BootSale> ReturnList()
{
return bootsales;
}
}
[可序列化]
公共类BootSaleList:IDisplay
{
私人清单销售;
公共列表返回列表()
{
退货销售;
}
}
它将完美地工作您不能在foreach中修改集合,但可以使用临时列表,大致如下:
public void DeleteSale()
{
List<T> temp = lstBootSales;
foreach (BootSale b in lstBootSales.SelectedItems)
{
temp.Items.Remove(b.Id);
temp.Items.Remove(b.Date);
DisplayAllBootSales();
}
lstBootSales = temp;
}
public void DeleteSale()
{
List temp=lstBootSales;
foreach(lstBootSales.SelectedItems中的BootSale b)
{
移除临时项目(b.Id);
移除临时项目(b.日期);
DisplayAllBootSales();
}
lstBootSales=临时;
}
您不能在foreach中修改集合,但可以使用临时列表,大致如下:
public void DeleteSale()
{
List<T> temp = lstBootSales;
foreach (BootSale b in lstBootSales.SelectedItems)
{
temp.Items.Remove(b.Id);
temp.Items.Remove(b.Date);
DisplayAllBootSales();
}
lstBootSales = temp;
}
public void DeleteSale()
{
List temp=lstBootSales;
foreach(lstBootSales.SelectedItems中的BootSale b)
{
移除临时项目(b.Id);
移除临时项目(b.日期);
DisplayAllBootSales();
}
lstBootSales=临时;
}
查看您的代码,我可能会认为,lstBootSales
包含一个BootSale
列表。但是你正在尝试删除一些与BootSale不同的内容。对于
也使用,而不是foreach:
for (int i = 0; i < lstBootSales.SelectedItems.Count; i++)
{
lstBootSales.Items.Remove(lstBootSales.SelectedItems[i]);
DisplayAllBootSales();
}
for(int i=0;i
查看您的代码,我可能会认为,lstBootSales
包含一个BootSale
列表。但是你正在尝试删除一些与BootSale不同的内容。对于
也使用,而不是foreach:
for (int i = 0; i < lstBootSales.SelectedItems.Count; i++)
{
lstBootSales.Items.Remove(lstBootSales.SelectedItems[i]);
DisplayAllBootSales();
}
for(int i=0;i
最好的方法是自上而下循环列表(而不是自下而上)
这样可以防止任何索引错误
Goodluck最好的方法是自上而下循环列表(而不是自下而上)
这样可以防止任何索引错误
Goodluck在枚举集合时不能修改集合。DisplayAllBootSales做什么?@bash.d Display all boot sales?@DGibbs谢谢,上校!问一个愚蠢的问题,得到一个愚蠢的答案。你不能在枚举集合时修改集合。DisplayAllBootSales做什么?@bash.d Display all boot sales?@DGibbs谢谢,上校!问一个愚蠢的问题,得到一个愚蠢的答案。感谢您的帮助,尝试了此操作,但出现错误“无法将类型'System.Windows.Forms.ListViewItem'转换为'Bootsale_project.Bootsale'”代码现在运行良好,但它只是删除了列表框的内容,而不是实际的列表。如果它没有异常崩溃,这正是您应该做的……很抱歉,一开始我可能不清楚我有一个“BootSale”列表,其中存储了写入列表框的信息。我希望能够单击列表框中的项目,然后单击删除,它将从系统中完全删除。我必须询问SelectedItems
是项目的子集,它包含的属性(Id
和Date
)包含在项目中的内容是如何可能的(从项中删除它们将是一个好主意)。我真的以为您是在询问此枚举器绑定到的“错误”列表已被修改。枚举器只能在列表不存在时使用