foreach控制c#跳过控件

Alt*_*ime 6 c# foreach controls enumeration winforms

我有以下循环来删除我的C#Windows窗体应用程序中的按钮.唯一的问题是它会跳过其他所有按钮.如何从表单中删除所有按钮控件?

foreach (Control cntrl in Controls)
{
    if(cntrl.GetType() == typeof(Button))
    {
        Controls.Remove(cntrl);
        cntrl.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

McG*_*gle 11

我认为这种方式更具可读性:

var controlsToRemove = Controls.OfType<Button>().ToArray();
foreach (var control in controlsToRemove)
{
    Controls.Remove(control);
    cntrl.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

调用ToArray()创建一个新的具体集合,以便您可以枚举一个并修改另一个.