如何迭代`IDictionary`的键和值?
如何迭代`IDictionary`的键和值?
如果我不知道IDictionary
中的键和值的具体类型,因此想将它们视为object
,那么我该如何迭代键和值呢?
如果我这样做:
foreach(var x in myIDictionary) { ... }
我认为x
是一个object
。但是我怎样才能以object
类型为参数,获取出Key
和Value
,正如IDictionaryEnumerator
中指定的那样? 是否有没有参数的IKeyValuePair
?
我想我可以手动循环遍历枚举器使用MoveNext
等,但是我觉得一定有一种用foreach
的方法!
admin 更改状态以发布 2023年5月23日
你忽略的一点是,如果你迭代一个IDictionary
,其值的类型是没有保证的,它们可以是任何类型。唯一保证的是,它实现了.GetEnumerator()
方法。
如果你想迭代IDictionary
的内容,你可以迭代它的键:
foreach (object key in myIDictionary.Keys) { object value = myIDictionary[key]; // do something with key and value }
你甚至可以将你的IDictionary
转换为Dictionary
,使foreach
更加友好:
var myDictionary = myIDictionary.Keys .Cast
你甚至可以添加一个扩展方法来实现这一点:
public static DictionaryToDictionary(this IDictionary dict) { return dict.Keys.Cast ().ToDictionary(k => k, k => dict[k]); } // usage // kv is a KeyValuePair foreach (var kv in myIDictionary.ToDictionary()) { }