c# 类型为Dictionary的object对象反射遍历key,value
时间: 2024-05-16 11:17:01 浏览: 184
假设你有一个类型为`Dictionary<string, object>`的变量`dict`,你可以通过以下方式使用反射遍历它的key和value:
```csharp
// 获取字典类型
Type dictType = dict.GetType();
// 获取Key和Value的类型
Type keyType = dictType.GetGenericArguments()[0];
Type valueType = dictType.GetGenericArguments()[1];
// 获取字典的Keys和Values属性
PropertyInfo keysProp = dictType.GetProperty("Keys");
PropertyInfo valuesProp = dictType.GetProperty("Values");
// 获取Keys和Values
IEnumerable keys = (IEnumerable)keysProp.GetValue(dict);
IEnumerable values = (IEnumerable)valuesProp.GetValue(dict);
// 遍历Keys和Values
foreach (object key in keys)
{
object value = values.Cast<object>().ElementAt(keys.Cast<object>().ToList().IndexOf(key));
Console.WriteLine("{0} : {1}", key, value);
}
```
这里的关键点是:
- 通过`GetType()`方法获取`dict`的实际类型;
- 通过`GetGenericArguments()`方法获取`Dictionary`类型的Key和Value类型;
- 通过`GetProperty()`方法获取字典的Keys和Values属性;
- 通过`GetValue()`方法获取Keys和Values的值;
- 使用`Cast()`方法将Values转换为`IEnumerable<object>`类型,使用`ElementAt()`方法找到与当前Key对应的Value。
阅读全文