0

[简化问题]

给定以下通用方法:

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

并假设它以下列方式调用:

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

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

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

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

4

1 回答 1

0

只要委托具有像 Action 这样的 void 返回类型,您就可以使用以下代码。

public static bool IsActionDelegate(Type sourceType)
{
    if(sourceType.IsSubclassOf(typeof(MulticastDelegate)) && 
       sourceType.GetMethod("Invoke").ReturnType == typeof(void))
        return true;
    return false;
}
于 2012-09-30T04:59:51.110 回答