gpt4 book ai didi

c# - 通过反射调用 Func

转载 作者:太空狗 更新时间:2023-10-30 01:10:05 25 4
gpt4 key购买 nike

我想将 lambda 表达式存储为对象,稍后使用反射执行它们。不管这样做的优点如何,我想知道如何使类似以下的工作正常进行。

假设我将不同的函数定义为 -

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();
}

谢谢

最佳答案

当然可以。您只需调用 DynamicInvoke,同时提供适当类型的参数。

但何必呢?你可以做更简单的事情

Delegate del;

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

del = f2;
var result2 = del.DynamicInvoke(100);

您可以将其中任何一个转换为 Delegate,您甚至不需要知道参数的类型或调用它们的返回值(只需知道参数的数量)。当然,您有时需要知道返回值的类型才能使用它,但仅此而已。

关于c# - 通过反射调用 Func<int,bool>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com