使用泛型和methodinfo

时间:2009-01-12 02:42:18

标签: c# .net reflection

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

我有这个代码使用MethodInfo:

MethodInfo methodInfo = typeof(t).GetMethod(s);

T只是一个泛型类型的持有者(类X,其中T:class,是类签名)。 s只是方法名称的一个字符串。

但是我有这个错误:

预期输入名称,但找到参数名称。

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

是什么给出了?

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

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

由于

3 个答案:

答案 0 :(得分:2)

引起错误是因为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(Type t, string methodName)
{
  MethodInfo method = t.GetMethod(methodName);
  // Do stuff
}

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

答案 1 :(得分:1)

也许你需要

t.GetType().GetMethod(s)

答案 2 :(得分:0)

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

这已经成功了(与上面的2个帖子相同)。