在运行时使用已知的T1和T2 </t1,t2>转换为Func <t1,t2>

时间:2015-04-14 11:00:13

标签: c# generics reflection

我有一个包含以下定义的字典

Dictionary<string, object>其中对象的类型为Func<T1, T2>

字典将各种功能存储为具有不同T1T2的对象。在运行时,根据传递的参数,我需要将对象强制转换为Func<T1, T2>,但我无法这样做。我知道T1T2在运行时的类型,但还没有找到一种方法来实现这一点。

有关如何启动和运行的任何想法?

2 个答案:

答案 0 :(得分:0)

最后,您有一个Delegate(所有Func<,>,其他代表都是Delegate),因此请像Delegate一样通过反思... < / p>

Delegate del = (Delegate)obj; // the object contained in the dictionary
object par = ... // your parameter
object result = del.DynamicInvoke(par);

显然par1必须属于&#34;权利&#34;类型。请注意,您的词典可以直接作为TValue Delegate类型。

Dictionary<string, Delegate> MyDictionary

答案 1 :(得分:0)

如果您知道所有代表都是某些Func<T1, T2>的实例,那么当T1是您的T2时,您可以使用del.GetType().GetGenericTypeArguments()来查询delT1委派。

但是,由于编译器不知道你的字典的内容,你不能指望编译器在编译时知道T1或T2,所以我不知道你想用T2和你做什么DynamicInvoke但我能想到的大多数事情都需要反思。

因此,除非有充分理由不这样做,我还建议使用xanatos提出的{{1}}。