为何遍历Dictionary需使用KeyValuePair而非Dictionary类型?
为什么遍历Dictionary必须使用KeyValuePair而非Dictionary类型?
核心原因:foreach遍历的是集合中的单个元素,而Dictionary的元素是键值对
foreach的工作逻辑很直接:它会依次取出集合里的每一个成员,赋值给你声明的变量,所以变量类型必须和集合中元素的类型匹配(或兼容)。
拿你熟悉的场景举例:遍历List<int>这类集合时,集合里的每个元素都是int类型,所以foreach(int item in items)完全合法——变量item的类型和集合元素类型一致。
而Dictionary<TKey, TValue>本质是一个存储键值对的集合,它内部的每一个元素都是KeyValuePair<TKey, TValue>对象,而非Dictionary<TKey, TValue>实例。你之前的错误写法foreach(Dictionary<TKey,TValue> item in dictionaryobject),相当于试图把一个键值对对象赋值给Dictionary类型的变量,这两种类型没有继承或转换关系,编译器自然会报错。
额外说明:还可以单独遍历Dictionary的键或值
如果不需要同时获取键和值,也可以选择遍历Dictionary的键集合或值集合:
- 遍历键:
foreach(int key in dictionaryobject.Keys) { // 处理键逻辑 }
- 遍历值:
foreach(string value in dictionaryobject.Values) { // 处理值逻辑 }
内容的提问来源于stack exchange,提问作者AB_ OBADA
相关产品推荐
相关产品推荐

