You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Name以ToClear开头的所有Label控件?代码执行异常

解决移除Label控件时仅删除一半的问题

你遇到的问题根源是直接在foreach循环中修改Controls集合——当你移除一个控件时,集合的元素位置会发生变化,foreach的枚举器会跳过下一个元素,导致只能处理一半目标控件。

修正后的代码

先把所有需要移除的Label收集到一个独立列表中,再遍历这个列表执行移除操作,这样就不会影响原集合的枚举:

private void ClearLabel()
{
    // 先筛选出所有符合条件的Label,存入临时列表
    var labelsToRemove = this.Controls.OfType<Label>()
                                      .Where(lbl => lbl.Name.StartsWith("ToClear"))
                                      .ToList();

    // 遍历临时列表移除控件
    foreach (var label in labelsToRemove)
    {
        this.Controls.Remove(label);
        // 可选:如果控件不再使用,记得释放资源
        label.Dispose();
    }
}

补充说明

  • 使用OfType<Label>()可以直接筛选出所有Label类型的控件,避免强制类型转换的麻烦
  • 先转成ToList()将筛选结果存入独立列表,确保遍历过程中原集合的变化不会影响遍历逻辑
  • 移除后调用Dispose()可以及时释放控件占用的资源,避免内存泄漏

内容的提问来源于stack exchange,提问作者Illia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:12:48