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

C# Dictionary通过LINQ过滤值后如何获取对应键?

解决字典过滤时保留对应键的问题

嗨,这个问题很常见——当你直接操作fooDictionary.Values时,确实会丢失对应的键信息。解决方案其实很简单,直接遍历字典的**键值对(KeyValuePair)**就好,这样就能同时拿到符合条件的MyObject和它关联的键啦!

具体实现步骤

你不需要先单独提取Values,而是直接对字典本身进行过滤,这样每个结果项都会包含Key和Value:

  1. 先获取过滤后的键值对集合
    这一步会保留所有Boo属性为false的对象及其对应键:

    var filteredKeyValues = fooDictionary.Where(kvp => kvp.Value.Boo == false).ToList();
    
  2. 分别提取键和对象,调用扩展方法
    从键值对集合里可以轻松拆分出你需要的键列表,以及用来调用扩展方法的对象列表:

    // 获取所有符合条件的键
    var matchingKeys = filteredKeyValues.Select(kvp => kvp.Key).ToList();
    // 获取符合条件的对象列表并调用你的扩展方法
    var extensionResult = filteredKeyValues.Select(kvp => kvp.Value).ToList().ExtensionMethod();
    

更紧凑的写法

如果你想减少变量,可以合并部分步骤,但可读性可能稍差一点:

// 先过滤得到键值对
var filteredPairs = fooDictionary.Where(kvp => kvp.Value.Boo == false);
// 调用扩展方法
var result = filteredPairs.Select(kvp => kvp.Value).ToList().ExtensionMethod();
// 获取对应的键
var matchingKeys = filteredPairs.Select(kvp => kvp.Key).ToList();

核心逻辑就是:不要一开始就丢弃键的信息,直接从字典的完整键值对集合出发进行过滤,这样就能同时保留你需要的键和对象啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:10:49