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

标签 c# reflection dictionary

我有一个对象 instance为此

instance.GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)

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

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

最佳答案

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

    foreach(var item in (dynamic)instance)
    {
       object key = item.Key;
       object val = item.Value;
    }

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

Type[] genericArguments = instance.GetType().GetGenericArguments();

关于c# - 在不知道其类型的情况下获取字典键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16503773/

相关文章:

python - 什么时候使用 hash() 调用 __eq__?

c# - 带有 "add"元素的简单列表的自定义 app.config 部分

pointers - 对指针 slice 的反射(reflection)

Python普通字典到有序字典的转换

java - 如何使用反射在私有(private)字段上运行方法?

c# - 使用运行时类型创建通用 Func 委托(delegate)

python - 如何将多个值添加到 Python 字典中的键

c# - SSIS 2015 脚本任务将文本文件转换为 C# 或 VB 中的 UTF8

c# - DbContext 和连接池

c# - .NET 4.0 中的本地化编码名称