我正在寻找一个更好的模式来处理每个需要处理的元素列表,然后根据结果从列表中删除.
你不能.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.
有一种优雅的方式来做到这一点?
注意:这已经可以正常工作,但我试图理解为什么它以这种方式工作,而不是另一种方式.
现在,如果您单击"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社区版,如果这是一个调试错误(?)