我想从一个只有在运行时才知道类型参数的泛型类中获得方法的MethodInfo
。如何查找使用强类型反射的泛型类方法的MethodInfo?
这是我如何会得到MethodInfo
为一个通用的方法从非通用类:
class MyClass
{
public void MyMethod<T> (T arg)
{
}
}
static MethodInfo Resolve (Type type)
{
Expression<Action<MyClass, object>> lambda = (c, a) => c.MyMethod (a);
MethodCallExpression call = lambda.Body as MethodCallExpression;
return call
.Method // Get MethodInfo for MyClass.MyMethod<object>
.GetGenericMethodDefinition() // Get MethodInfo for MyClass.MyMethod<>
.MakeGenericMethod (type); // Get MethodInfo for MyClass.MyMethod<int>
}
Resolve (typeof (int)).Invoke (new MyClass(), new object[] {3});
现在,如果我想尝试用一个通用类类似的东西:
class MyClass<T>
{
public void MyMethod (T arg)
{
}
}
static MethodInfo Resolve (Type type)
{
Expression<Action<MyClass<object>, object>> lambda = (c, a) => c.MyMethod (a);
MethodCallExpression call = lambda.Body as MethodCallExpression;
return call
.Method // Get MethodInfo for MyClass<object>.MyMethod
.SomeMagicMethod(); // FIXME: how can I get a MethodInfo
// for MyClass<T>.MyMethod where typeof (T) == type?
}
Resolve (typeof (string)).Invoke (new MyClass<string>(), new object[] {"Hello, World!"});
可能吗?
因为'C .Meth'和'C .Meth'是风马牛不相及方法根据.NET类型系统,因为他们的'DeclaringType'这是棘手s是不同的。 –
usr
2013-04-11 21:44:11
你能解决你的解决方案代码吗?您正在使用'method'变量作为'MethodInfo'和'MethodInfo []'。甚至搜索数组匹配相同的变量。这是没有意义的。 – kjbartel 2015-09-03 04:36:08
变量'method'确实应该是一个数组,但第二个搜索遍历包含解决方案,所以它只是一个错误。考虑再次阅读问题。 – r3c 2015-09-04 07:04:23