gpt4 book ai didi

c# - 使用反射在运行时创建动态泛型

转载 作者:太空狗 更新时间:2023-10-29 21:36:27 25 4
gpt4 key购买 nike

我正在尝试通过检查键的类型将 Dictionary<dynamic, dynamic> 转换为静态类型的字典和值,并使用反射创建适当类型的新字典。如果我知道键和值类型,我可以执行以下操作:

Type dictType = typeof(Dictionary<,>);

newDict = Activator.CreateInstance(dictType.MakeGenericType(new Type[] { keyType, valueType }));

但是,如果值不是全部相同的类型,我不知道如何指定动态类型,因为

typeof(dynamic)

不可行。

我该怎么做,和/或是否有更简单的方法来完成我想做的事情?

最佳答案

C# 编译器发出 System.Object 作为“动态”的类型。 “dynamic”是特定于语言的构造,在公共(public)语言基础结构中没有相应的类型。因此,您将无法使用反射来创建“动态”,也无法将“动态”用作泛型类型参数。

字典 实际上是字典 。 “动态”对编译器意味着什么只是后期绑定(bind)使用反射的对象的任何成员访问(如果您好奇的话,它的实现位于 Microsoft.CSharp 程序集中)。

附带说明一下,编译器还将在“动态”的字段、参数等上发出一个属性 DynamicAttribute;这允许人们使用程序集的元数据来区分 System.Object 和“动态”。例如,这就是 IntelliSense 将方法的参数显示为来自程序集引用的动态参数的方式。

关于c# - 使用反射在运行时创建动态泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5132639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com