gpt4 book ai didi

c# - 代码困惑 - 为什么一个有效,而另一个无效?

转载 作者:太空狗 更新时间:2023-10-29 20:04:23 25 4
gpt4 key购买 nike

注意:这已经可以正常工作了,但我试图理解为什么它会以这种方式工作,而不是其他方式。

我有一个带有动态放置图像的 WinForm (C#),如下所示: enter image description here

现在,如果您单击“Napred”按钮,这些图像应该被删除(除其他外),我最初使用的是:

foreach(Control ctrl in Controls)
if(ctrl is PictureBox) ctrl.Dispose();

for(int i = 0; i < Controls.Count; i++)
if(Controls[i] is PictureBox) Controls[i].Dispose();

现在如果我运行它,我会得到:

enter image description here

但是,如果我只是将 for 语句更改为向后发送,它有效吗?

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

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

谁能告诉我为什么一个有效,而另一个无效

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

最佳答案

您正在尝试更改正在迭代的列表,这当然会更改此列表的索引,因此索引 1 的内容现在位于索引 0。

通过从数组末尾移除(即在你的反向),之前的索引将始终相同。

同样重要的是要注意 Matthew Watson 的评论中所述:

Control.Dispose() is special and will remove the control from a parent container's Controls list.

这不是大多数 Dispose 方法的默认行为,因此您在使用 Dispose 时不会总是发现此行为

关于c# - 代码困惑 - 为什么一个有效,而另一个无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com