使用字符串指定泛型类型参数

本文关键字:泛型类型参数 字符串 | 更新日期: 2023-09-27 18:27:14

假设我有一个方法

public void Whatever<T>() { ... }

假设我有一个字符串形式的类型

var myType = "System.String";

通常,我会调用这样的方法:

Whatever<string>();

但我希望能够以某种方式使用myType来调用它。这可能吗?我知道这不起作用,但从概念上讲:

Whatever<Type.GetType(myType)>();

使用字符串指定泛型类型参数

您可以使用反射和MethodInfo.MakeGenericMethod进行

反映要调用的方法以获取MethodInfo,然后使其通用并调用它。

类似的事情(注意,这是我的想法(这里没有VS),它可能还不完美,但应该让你开始):

Type type = myObject.GetType();
MethodInfo method = type.GetMethod("NameOfMethod");
MethodInfo genericMethod = method.MakeGenericMethod(typeOf(string));
genericMethod.Invoke(myObject, new object[] { "theString" } );

您可以通过Reflection创建实例(或者同时提供泛型和非泛型Whatever类型)。当然,"反射"是缓慢的(并且只能有一个对象或基类引用)。通常,泛型类型可以只是非泛型类型的专门化。