我有一个包含以下定义的字典
Dictionary<string, object>
其中对象的类型为Func<T1, T2>
字典将各种功能存储为具有不同T1
和T2
的对象。在运行时,根据传递的参数,我需要将对象强制转换为Func<T1, T2>
,但我无法这样做。我知道T1
和T2
在运行时的类型,但还没有找到一种方法来实现这一点。
有关如何启动和运行的任何想法?
答案 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()
来查询del
和T1
委派。
但是,由于编译器不知道你的字典的内容,你不能指望编译器在编译时知道T1或T2,所以我不知道你想用T2
和你做什么DynamicInvoke
但我能想到的大多数事情都需要反思。
因此,除非有充分理由不这样做,我还建议使用xanatos提出的{{1}}。