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

如何无需遍历C#字典,提取FileNameId=7的项到新字典?

解决方案

要实现将原字典中FileNameId等于7的项提取到新字典,你可以借助LINQ的声明式语法来避免显式编写foreach循环(底层仍会遍历,但代码更简洁):

代码实现

首先确保引入LINQ命名空间:

using System.Linq;

然后生成目标字典:

// 生成包含所有键的新字典,对应值为筛选后的列表(保留空列表的键)
Dictionary<string, List<FirstReportsData>> dicFsrFileNameId7 = dicFsrFileNameId1
    .ToDictionary(
        kvp => kvp.Key,
        kvp => kvp.Value?.Where(item => item.FileNameId == 7).ToList() ?? new List<FirstReportsData>()
    );

// 如果需要过滤掉值列表为空的键值对,可追加以下步骤
dicFsrFileNameId7 = dicFsrFileNameId7
    .Where(kvp => kvp.Value.Any())
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

关键说明

  • ToDictionary会遍历原字典的每个键值对,对每个值列表执行Where筛选,只保留FileNameId == 7的项并转为新列表。
  • 代码中加入了kvp.Value?和?? new List<FirstReportsData>()的空值处理,避免原字典中存在null列表时抛出空引用异常。
  • 若不需要保留值为空列表的键,可通过Where(kvp => kvp.Value.Any())过滤后再转字典。

需要注意:C#中不存在完全不遍历的方式——要筛选元素必须访问每个项,LINQ只是将遍历逻辑封装,无需显式编写循环而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:22:49