[简化问题]
给出以下通用方法:
public T MyFunction<T>()
{
// ...
}
鉴于它是以下列方式调用的:
MyFunction<Action<int, string>>();
如何从MyFunction中的代码中检测到T具有哪些参数(因为它是委托)?
[你想做什么?!?!?!?]
我有一个带有void MyFunction<T>(Expression<Func<T>> delegateReturner);
的实际签名的方法,它需要知道T所具有的参数而不实际调用该方法,因此它可以生成一个LINQ表达式。
答案 0 :(得分:0)
只要委托具有像Action一样的void返回类型,就可以使用以下代码。
public static bool IsActionDelegate(Type sourceType)
{
if(sourceType.IsSubclassOf(typeof(MulticastDelegate)) &&
sourceType.GetMethod("Invoke").ReturnType == typeof(void))
return true;
return false;
}