Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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 using listbox从列表中删除选定项_C# - Fatal编程技术网

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
)包含在
项目中的内容是如何可能的(从
项中删除它们将是一个好主意)。我真的以为您是在询问此枚举器绑定到的“错误”列表已被修改。枚举器只能在列表不存在时使用