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

C# 如何对列表分层过滤且保留原顺序,仅对Complete项筛选Flag=1

解决方案

你原有代码打乱顺序的核心原因是:把原列表拆成了「未完成项」和「符合条件的完成项」两个独立子集再合并,相当于把所有未完成项都堆到了最前面,自然破坏了原列表的元素顺序。

直接用一次Where过滤即可,Where运算符默认会严格保留原集合的元素遍历顺序,不需要拆分集合再拼接:

优化后代码

var finalResult = todoList.Where(item => 
    // 非完成状态的条目直接保留
    item.Status != "Complete" 
    // 完成状态的条目需要同时满足Flag为1才保留
    || (item.Status == "Complete" && item.Flag == 1)
).ToList();

逻辑验证

对应你给出的示例数据,过滤逻辑匹配结果如下:

  • 顺序1:状态Complete,Flag=0 → 不满足条件,过滤
  • 顺序2:状态Complete,Flag=1 → 满足条件,保留
  • 顺序3:状态Not Started,Flag=0 → 满足条件,保留
  • 顺序4:状态Complete,Flag=1 → 满足条件,保留
    最终输出顺序和原列表完全一致,符合预期要求。

额外优化建议

如果Status字段是固定的可选值,建议定义成枚举类型替代硬编码字符串,避免拼写错误导致逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:03