通过反射调用Func <int,bool>

ili*_*ias 4 c# generics reflection delegates

我想将lambda作为对象存储,然后使用反射执行它们.不管这样做的优点如何,我想知道如何得到类似下面的工作.

假设我将不同的功能定义为 -

Func<string,bool> f1 = (i)=>i == "100";
Func<int,bool> f2 = (i)=>i == 100;
Run Code Online (Sandbox Code Playgroud)

我可以在运行时执行这些操作,如果我在运行时获取所有类型(我不能将对象强制转换为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();
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Jon*_*Jon 5

你当然可以.您只需DynamicInvoke在提供适当类型的参数时调用即可.

但为什么要这么麻烦?你可以做得更简单

Delegate del;

del = f1;
var result1 = del.DynamicInvoke("99");

del = f2;
var result2 = del.DynamicInvoke(100);
Run Code Online (Sandbox Code Playgroud)

你可以将其中任何一个转换为Delegate,你甚至不需要知道参数的类型或调用它们的返回值(只是参数的数量).当然,你需要在某个时候知道返回值的类型才能使用它,但这就是它.