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

C#中如何正确获取Dictionary字典指定键对应的值

C# Dictionary<string, List> 取值正确实现

原有代码的问题

你之前的写法存在几个明显错误:

  • 遍历mydict.Keys拿到的集合元素全是字典的键(string类型),不是对应的值
  • 声明List<string> key时没有做实例化,直接调用Add()会触发空引用异常
  • 逻辑上没有建立键和对应值的关联,根本没有拿到键对应的列表对象

不同场景的正确写法

1. 遍历字典所有键值对(推荐,效率最高)

直接遍历KeyValuePair结构,一次遍历就能同时拿到键和对应的值,不需要额外做键查找:

foreach (var kvp in mydict)
{
    string currentKey = kvp.Key; // 当前项的键
    List<string> valueList = kvp.Value; // 当前键对应的字符串列表,直接用即可
    // 示例:往列表加元素
    valueList.Add("新增的字符串内容");
}

2. 已知指定键名,取对应的值

优先用TryGetValue,只做一次键查找就能同时完成存在性判断和取值,性能比先判断ContainsKey再索引取值更好:

string searchKey = "你要查询的目标键";
if (mydict.TryGetValue(searchKey, out List<string> targetList))
{
    // 键存在,targetList就是对应的值,直接操作
    targetList.Add("新元素");
}
else
{
    // 键不存在的自定义逻辑,比如初始化新列表存入字典
    mydict[searchKey] = new List<string> { "键不存在时初始化的第一个元素" };
}

如果确定键一定存在,也可以直接用索引器取值,但是键不存在时会抛出KeyNotFoundException:

// 仅在100%确定键存在时使用
List<string> definitelyExistValue = mydict["确定存在的键名"];

3. 必须遍历所有键再取值的场景

如果你业务逻辑就是需要先拿到所有键再做处理,也可以在遍历键的时候通过索引器传键拿到对应值,但是这种方式每次取值都会做一次键哈希查找,效率比直接遍历键值对低:

foreach (string key in mydict.Keys)
{
    List<string> valueList = mydict[key];
    valueList.Add("新元素");
}

注意:因为List<string>是引用类型,你拿到kvp.Value或者TryGetValue输出的列表对象后,直接对列表做增删改操作,修改会自动同步到字典存储的值上,不需要再把列表重新赋值回字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:15:48