如何迭代一个`IDictionary`的键和值?
如果我不知道关键字和值中的具体类型,我将如何遍历一个IDictionary
的键和值,因此只想将它们当作object
?
如果我做了这样的事情:
foreach(var x in myIDictionary) { ... }
我认为x
是一个object
。 但是,如何按照IDictionaryEnumerator
规定获取Key
和Value
(都作为object
的类型)? 没有通用参数的IKeyValuePair
没有吗?
我想我可以通过使用MoveNext
等手动循环访问枚举器,但是我觉得必须有一种方法可以用foreach
来实现!
你可以像这样在foreach
显式地指定DictionaryEntry
对的类型:
foreach (DictionaryEntry x in myIDictionary)
尽管您应该确定它是IDictionary
标准实现(如Hashtable
或Dictionary<TKey, TValue>
)
否则,它可以在字面上任何在枚举。
你遗漏的一点是,如果迭代一个IDictionary
,那么就不能保证值的IDictionary
。 他们可以是字面上的任何东西。 唯一的保证是它实现了.GetEnumerator()
。
如果你想遍历IDictionary
的内容,你可以遍历它的键:
foreach (object key in myIDictionary.Keys)
{
object value = myIDictionary[key];
// do something with key and value
}
你也可以将你的IDictionary
转换成一个Dictionary<object, object>
来使foreach
更加友好:
var myDictionary = myIDictionary.Keys
.Cast<object>()
.ToDictionary(k => k, k => d[k]);
// kv is a KeyValuePair<object, object>
foreach (var kv in dobj)
{
}
你甚至可以添加一个扩展方法为你做到这一点:
public static Dictionary<object, object> ToDictionary(this IDictionary dict)
{
return dict.Keys.Cast<object>().ToDictionary(k => k, k => dict[k]);
}
// usage
// kv is a KeyValuePair<object, object>
foreach (var kv in myIDictionary.ToDictionary())
{
}
链接地址: http://www.djcxy.com/p/30399.html
上一篇: How to iterate through keys and values of an `IDictionary`?