【发布时间】:2011-03-23 15:12:50
【问题描述】:
我想将 lambdas 存储为对象并稍后使用反射执行它们。不管这样做有什么好处,我想知道如何得到类似下面的东西。
假设我有不同的功能定义为 -
Func<string,bool> f1 = (i)=>i == "100";
Func<int,bool> f2 = (i)=>i == 100;
如果我在运行时获得所有涉及的类型,我可以在运行时执行这些(我无法将对象强制转换为 Func 等,因为我不知道涉及哪些类型),我可以执行以下操作吗?
void RunFunc(Type param1, Type returnParam, object obj)
{
Type funcType = typeof(Func<,>).MakeGenericType(param1,returnParam);
var d = Delegate.CreateDelegate(funcType , obj,"Invoke");
d.DynamicInvoke();
}
谢谢
【问题讨论】:
-
在创建 o 或 f 之后,您永远不会使用它们。为什么不将 o 转换为 Func
并直接调用它? -
旁注 - Func
可以替换为 Predicate ,我发现它更有意义。 -
为什么将
f声明为Func<string,bool>并将funcType声明为Func<int,bool>?是故意的吗?
标签: c# generics reflection delegates