相关疑难解决方法(0)

如何在迭代时从通用列表中删除元素?

我正在寻找一个更好的模式来处理每个需要处理的元素列表,然后根据结果从列表中删除.

你不能.Remove(element)在里面使用foreach (var element in X)(因为它导致Collection was modified; enumeration operation may not execute.异常)...你也不能使用for (int i = 0; i < elements.Count(); i++),.RemoveAt(i)因为它会扰乱你在集合中的当前位置i.

有一种优雅的方式来做到这一点?

c# generics loops list key-value

418
推荐指数
15
解决办法
35万
查看次数

代码混淆 - 为什么一个工作,而另一个工作?

注意:这已经可以正常工作,但我试图理解为什么它以这种方式工作,而不是另一种方式.

我有一个动态放置图像的WinForm(C#),如下所示: 在此输入图像描述

现在,如果您单击"Napred"按钮,应删除这些图像(以及其他内容),我最初使用这些图像:

foreach(Control ctrl in Controls)
    if(ctrl is PictureBox) ctrl.Dispose();
Run Code Online (Sandbox Code Playgroud)

要么

for(int i = 0; i < Controls.Count; i++)
    if(Controls[i] is PictureBox) Controls[i].Dispose();
Run Code Online (Sandbox Code Playgroud)

现在如果我运行这个,我得到:

在此输入图像描述

但是,如果我只是将for声明改为向后发送,那么它有效吗?

for(int i = Controls.Count - 1; i >= 0; i--)
    if(Controls[i] is PictureBox) Controls[i].Dispose();
Run Code Online (Sandbox Code Playgroud)

(我不会上传另一张图片,但会删除所有元素(我只留下最后的按钮))

有人可以告诉我为什么一个有效,而不是另一个有效吗?

编辑:我在Windows 10上使用VS2015社区版,如果这是一个调试错误(?)

c# for-loop picturebox winforms

7
推荐指数
1
解决办法
119
查看次数

标签 统计

c# ×2

for-loop ×1

generics ×1

key-value ×1

list ×1

loops ×1

picturebox ×1

winforms ×1