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
相关产品推荐
相关产品推荐

