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

如何在嵌套循环中删除含非激活Action或无Action的Controllers?

最优实现方案:清理Permissions中的Controllers

需求回顾

  • 删除包含至少一个Active=false的Action的Controllers
  • 删除Action列表为空(或为null)的Controllers

推荐实现:LINQ链式查询(简洁高效)

利用LINQ的Where、Any、All方法可一行完成逻辑,代码可读性高且性能优异:

// 假设已有Permissions实例permission
permission.controllers = permission.controllers
    .Where(ctrl => 
        ctrl.actions != null && 
        ctrl.actions.Any() && 
        ctrl.actions.All(action => action.Active))
    .ToList();

逻辑拆解

  • ctrl.actions != null:规避空引用异常,确保Action列表不为null
  • ctrl.actions.Any():过滤掉Action列表为空的控制器(满足第二个需求)
  • ctrl.actions.All(action => action.Active):仅保留所有Action都处于激活状态(Active=true)的控制器,自动排除包含无效Action的控制器(满足第一个需求)

备选实现:原地修改集合(RemoveAll)

如果需要直接修改原列表而非重新赋值,可使用List<T>.RemoveAll方法,同样高效:

// 直接在原列表中删除不符合条件的控制器
permission.controllers?.RemoveAll(ctrl => 
    ctrl.actions == null || 
    !ctrl.actions.Any() || 
    ctrl.actions.Any(action => !action.Active));

对比嵌套循环的优势

  • 代码简洁:无需多层嵌套循环,逻辑一目了然
  • 避免异常:手动foreach循环中直接删除元素会触发InvalidOperationException,LINQ或RemoveAll内部已处理集合修改的问题
  • 性能优化:LINQ底层实现经过官方优化,性能不逊于手动编写的循环,复杂场景下表现更稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:31:01