C# 泛型通过反射动态指定类型

标签 c# generics reflection

我正在尝试通过反射设置通用列表的类型 T。这是我的代码:

if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(List<>))
{
    Type itemType = propertyType.GetGenericArguments()[0];
    var result = MyGenericMethod<itemType>(url);   
}

这给了我一个语法错误。如何通过反射设置泛型类型的类型参数 T ?

谢谢

最佳答案

您可以通过利用 InvokeMakeGenericMethod 来使用反射来完成此操作。

您需要知道它正在执行的类的名称,我们称之为ClassName。绑定(bind)标志也非常重要,如果它们不正确(这里猜测是因为您没有显示方法签名),那么 MethodInfo 将为 null 并且您将得到一个异常。

if(/*noted conditions in question*/)
{
   Type itemType = propertyType.GetGenericArguments()[0];
   Type ThisClass = typeof(ClassName);
   MethodInfo mi = ThisClass.GetMethod("MyGenericMethod", BindingFlags.Instance | BindingFlags.NonPublic);
   MethodInfo miConstructed = mi.MakeGenericMethod(itemType);
   object[] args = { url };
   var result = miConstructed.Invoke(this, args);
}

关于C# 泛型通过反射动态指定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941474/

相关文章:

JSON Unmarshal 不适用于 relect 创建的动态结构

c# - C#中如何过滤多个字符串

swift - 如何实现一个符合相互关联协议(protocol)之一的泛型类?

generics - 泛型类型的泛型构造函数的显式类型注释

java - 将泛型数组传递给采用泛型数组的方法

java - 反射+java库

c# - 如何写入隐藏文件?

c# - 无法从我的 C# 控制台应用程序中使用 MongoDB

c# - 如何禁用 dataGridView 中不可点击的按钮(c# windows 应用程序)

java - 如何检查Java中变量的类型?