在不知道其类型的情况下获取字典键值对

nic*_*hev 6 c# reflection dictionary

我有一个对象instance的哪些

instance.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)
Run Code Online (Sandbox Code Playgroud)

是真的.我的问题是,如何在不真正了解其泛型类型的情况下从该对象中提取键值对?我想得到类似的东西KeyValuePair<object, object>[].请注意,我也知道字典在运行时使用的泛型类型(但不是编译时).我认为需要某种反思?

后续:是否有一种通用的机制来转换objectSomeClass<>(如果我知道这是正确的类型,当然)并因此使用它,因为类的实现不受泛型参数类型的影响?

Dim*_*rov 7

我会按照 Jeremy Todd 所说的去做,但可能会更短一点:

    foreach(var item in (dynamic)instance)
    {
       object key = item.Key;
       object val = item.Value;
    }
Run Code Online (Sandbox Code Playgroud)

作为旁注(不确定是否有帮助),您可以获得这样的参数类型:

Type[] genericArguments = instance.GetType().GetGenericArguments();
Run Code Online (Sandbox Code Playgroud)


Jer*_*odd 5

对于快速解决方案,您可以使用dynamic

Dictionary<string, int> myDictionary = new Dictionary<string, int>();

myDictionary.Add("First", 1);
myDictionary.Add("Second", 2);
myDictionary.Add("Third", 3);

dynamic dynamicDictionary = myDictionary;

foreach (var entry in dynamicDictionary)
{
  object key = entry.Key;
  object val = entry.Value;
  ...whatever...
}
Run Code Online (Sandbox Code Playgroud)