IDictionary如果我不知道其中的键和值的具体类型,我将如何遍历键和值的值,因此只想将它们视为objects?
如果我这样做:
foreach(var x in myIDictionary) { ... }
我认为x是一个object.但我怎么会得到Key与Value出它(这两个类型为objectS),在指定的IDictionaryEnumerator?有IKeyValuePair没有通用参数吗?
我想我可以手动循环使用枚举器MoveNext等,但我觉得必须有办法做到这一点foreach!
Lan*_*kin 15
您可以像这样明确指定DictionaryEntry对类型foreach:
foreach (DictionaryEntry x in myIDictionary)
Run Code Online (Sandbox Code Playgroud)
虽然你应该确定它是IDictionary(像Hashtable或Dictionary<TKey, TValue>)的标准实现
否则它在枚举器中几乎可以是任何东西.
您缺少的一点是,如果您迭代一个IDictionary. 它们实际上可以是任何东西。唯一的保证是它实现.GetEnumerator().
如果要遍历 的内容IDictionary,可以遍历其键:
foreach (object key in myIDictionary.Keys)
{
object value = myIDictionary[key];
// do something with key and value
}
Run Code Online (Sandbox Code Playgroud)
您还可以将您的转换IDictionary为 aDictionary<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)
{
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以添加一个扩展方法来为您执行此操作:
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())
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9755 次 |
| 最近记录: |