[英]Delete from list using foreach using listbox selected item
我正在嘗試使用通過單擊按鈕運行的方法,該方法將從列表框中檢索選擇的項目,然后從列表中刪除該項目。 每當我運行代碼時,都會出現此錯誤:“此枚舉器綁定到的列表已被修改。枚舉器只能在列表不變的情況下使用。”
我完全迷住了。
public void DeleteSale()
{
foreach (BootSale b in lstBootSales.SelectedItems)
{
lstBootSales.Items.Remove(b.Id);
lstBootSales.Items.Remove(b.Date);
DisplayAllBootSales();
}
}
DisplayAllBootSales();
之后只需刷新列表框值
我有一個列表“ BootSale”,其中存儲了寫入列表框的信息。 我希望能夠單擊列表框中的項目,然后單擊“刪除”,它將完全從系統中刪除
錯誤消息說明了一切。 您無法從要迭代的列表中刪除項目。 您必須在foreach
循環之外刪除項目。 一個簡單的解決方法是改用常規的for
循環。
做這個:
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();
}
}
}
哪里:
[Serializable]
public class BootSaleList : IDisplay
{
private List<BootSale> bootsales;
public List<BootSale> ReturnList()
{
return bootsales;
}
}
它會完美地工作
您不能從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;
}
最好的方法是循環從上到下(而不是從下到上)列表
for(int i = YourListItems.Count(); i > 0; i--)
{
// Remove from list
}
這樣可以防止任何索引錯誤。
祝好運
查看您的代碼,我可能會認為lstBootSales
擁有一個BootSale
列表。 但是您正在嘗試刪除不同於BootSale的內容。 也可以使用for
代替foreach:
for (int i = 0; i < lstBootSales.SelectedItems.Count; i++)
{
lstBootSales.Items.Remove(lstBootSales.SelectedItems[i]);
DisplayAllBootSales();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.