簡體   English   中英

使用列表框所選項目使用foreach從列表中刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM