在泛型方法中检测运行时的委托参数

时间:2012-09-30 00:19:25

标签: c# .net generics delegates

[简化问题]

给出以下通用方法:

public T MyFunction<T>()
{
// ...
}

鉴于它是以下列方式调用的:

MyFunction<Action<int, string>>();

如何从MyFunction中的代码中检测到T具有哪些参数(因为它是委托)?

[你想做什么?!?!?!?]

我有一个带有void MyFunction<T>(Expression<Func<T>> delegateReturner);的实际签名的方法,它需要知道T所具有的参数而不实际调用该方法,因此它可以生成一个LINQ表达式。

1 个答案:

答案 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;
}