有这个课程:
class ClassA{
}
以及具有此签名的方法:
void MyMethod<T>();
我们所有人都以这种方式使用它:
MyMethod<ClassA>();
但是......有一些机会调用MyMethod
将类名作为字符串吗?即:
var className = "ClassA";
MagicMethod($"MyMethod<{className}>();");
我在JavaScript中谈论了一些等同的Eval
。反思?,有什么想法吗?
我搜索了一些类似DynamicExpresso的库,但没有支持泛型类型。
关于可能的重复:
答案 0 :(得分:4)
提供以下方法:
public class Foo
{
public void MyMethod<T>();
}
您可以获得MethodInfo:
MethodInfo methodInfo = typeof(Foo).GetMethod("MyMethod");
现在,让我们说你有这个课程:
public class exampleB
{
}
您可以使用泛型参数类型的名称调用泛型方法:
string genericTypeName = "exampleB";
Type genericType = Type.GetType(genericTypeName);
MethodInfo methodInfo = typeof(Foo).GetMethod("MyMethod").MakeGenericMethod(genericType);
// You will need an instance of Foo to invoke it (the method isn't static)
methodInfo.Invoke(fooInstance, null);
当然,这需要运行时搜索类型B
,所以你应该小心并指定正确的命名空间。