gpt4 book ai didi

c# - 在循环中删除控件会导致奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:38 25 4
gpt4 key购买 nike

当我尝试删除所有动态分配的按钮时,我遇到了一些奇怪的行为。

我给这些按钮中的每一个都取了与“dynamicButton”相同的名称

for (int i = 0; i < 10; i++)
{
foreach (Control item in Controls.OfType<Control>())
{
if (item.Name.Contains("dynamicButton"))
{
Controls.Remove(item);
}
}
}

请注意它循环了 10 次(尽管 6 或 7 次就足够了)。下面我将向您展示它是如何做的。

At i=0

At i=1

At i=2

At i=3

以此类推,直到它们全部消失。

如图所示,我在这个东西中做了很多不必要的循环,并且出于某种原因,即使我使用相同的参数,它也没有全部取出...

有人知道为什么会这样吗?

最佳答案

您在遍历集合的同时修改集合。某些集合类型(如 List<T> )具有针对此的内置“保护”,在下一次迭代时抛出异常,但是 ControlCollection显然没有。

假设您在元素 #4 处将其删除 - 元素 #5 将移动到 #4,导致它被跳过。

你可以反转循环,即:

for (int i = Controls.Count - 1; i >= 0; i--)
{
Control item = Controls[i];
if (item.Name.Contains("dynamicButton"))
{
Controls.RemoveAt(i);
}
}

关于c# - 在循环中删除控件会导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47926405/

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