C# 使用泛型和methodinfo

C# 使用泛型和methodinfo,c#,.net,reflection,C#,.net,Reflection,我正在为一个开源项目构建一个基本的分析器。一个要求是测量方法的执行时间。虽然这很简单,但我必须在运行时之前不知道方法或其包含的类。调用探查器的方法是当用户在活动文档中从IDE调用探查器时。因此,如果class1是打开的,并且用户右键单击文档中的空白,选择profile,那么,也只有这样,类才是已知的 我有以下代码可以使用MethodInfo: MethodInfo methodInfo = typeof(t).GetMethod(s); T只是泛型类型持有者(class X,其中T:class

我正在为一个开源项目构建一个基本的分析器。一个要求是测量方法的执行时间。虽然这很简单,但我必须在运行时之前不知道方法或其包含的类。调用探查器的方法是当用户在活动文档中从IDE调用探查器时。因此,如果class1是打开的,并且用户右键单击文档中的空白,选择profile,那么,也只有这样,类才是已知的

我有以下代码可以使用MethodInfo:

MethodInfo methodInfo = typeof(t).GetMethod(s);
T只是泛型类型持有者(class X,其中T:class是类签名)。s只是方法名的字符串

但是,我有一个错误:

应为类型名称,但找到参数名称

该行代码的包含方法将t作为类型为t的参数,但将其移出并不能解决问题。T只是一个对象,如果我提供一个对象名,比如类名,那么就不会有错误

有什么好处

编辑:也许激活器可以解决这个问题

另外,我可以使用where子句来限制T仅为静态类吗

谢谢

也许你需要

t.GetType().GetMethod(s)
也许你需要

t.GetType().GetMethod(s)

导致此错误的原因是,typeof需要一个类型名称或参数,如typeof(int)或typeof(T),其中T是一个类型参数。看起来t是System.Type的一个实例,因此不需要typeof

您是否需要此的泛型类型?这样不行吗

public void DoSomething(object obj, string methodName)
{
  MethodInfo method = obj.GetType().GetMethod(methodName);
  // Do stuff
}


此外,没有办法将类型参数限制为静态类。我不确定这会有什么用,因为您不能拥有它的实例,它也无法实现任何可以在泛型方法中使用的接口。

导致此错误的原因是,typeof需要一个类型名称或参数,如typeof(int)或typeof(t),其中t是一个类型参数。看起来t是System.Type的一个实例,因此不需要typeof

public void DoSomething(object obj, string methodName)
{
  MethodInfo method = obj.GetType().GetMethod(methodName);
  // Do stuff
}
您是否需要此的泛型类型?这样不行吗

public void DoSomething(object obj, string methodName)
{
  MethodInfo method = obj.GetType().GetMethod(methodName);
  // Do stuff
}

此外,没有办法将类型参数限制为静态类。我不确定这会有什么用,因为你不能拥有它的实例,它也不能实现任何可以在泛型方法中使用的接口

public void DoSomething(object obj, string methodName)
{
  MethodInfo method = obj.GetType().GetMethod(methodName);
  // Do stuff
}
这就成功了(与上面的两篇文章相同)


这就完成了技巧(与上面的两篇文章相同)。

您能演示如何调用包含该行代码的方法吗?您能演示如何调用包含该行代码的方法吗?