如何迭代一个`IDictionary`的键和值?

如果我不知道关键字和值中的具体类型,我将如何遍历一个IDictionary的键和值,因此只想将它们当作object

如果我做了这样的事情:

foreach(var x in myIDictionary) { ... }

我认为x是一个object 。 但是,如何按照IDictionaryEnumerator规定获取KeyValue (都作为object的类型)? 没有通用参数的IKeyValuePair没有吗?

我想我可以通过使用MoveNext等手动循环访问枚举器,但是我觉得必须有一种方法可以用foreach来实现!


你可以像这样在foreach显式地指定DictionaryEntry对的类型:

foreach (DictionaryEntry x in myIDictionary)

尽管您应该确定它是IDictionary标准实现(如HashtableDictionary<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`?

下一篇: Dimension array of List in C#?