C#从委托中获取类型参数,这是一个Func<>

时间:2016-03-16 20:02:05

标签: c# delegates func

说我投了一个Func<>致代表,例如......

Func<object, int> func = GetFunc();
Delegate d = func;

现在,如果我提前知道代表的类型,我可以直接回到Func&lt;&gt;

Func<object, int> newFunc = (Func<object, int>)d;

但是如果我在运行时之前不知道函数类型怎么办?如何取回我的Func&lt;&gt;来自代表?

Delegate d = GetFunc(); // may return a Func<T>, Func<T,T2>, Func<T,T2,T3>, etc...
var func = GetFuncFromDelegate(d);

或至少获取Type参数,以便重建类型:

Delegate d = GetFunc(); // may return a Func<T>, Func<T,T2>, Func<T,T2,T3>, etc...
Type[] funcParams = GetTypeParamsFromDelegate(d);

1 个答案:

答案 0 :(得分:2)

  

或至少获取Type参数,以便重建类型:

这个很简单:

update t1
set num_books=inventory
FROM bs t1 LEFT JOIN
(select bookstore_id,SUM(case when event_name like 'A' then 1 when event_name like 'R' then -1 else NULL end)  as inventory
from bse 
group by bookstore_id) t2
on t1.bookstore_id=t2.bookstore_id