You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让函数支持接收带参数的函数调用作为入参?

解决方法:让函数接受无参数委托来包装带参调用

其实这个问题的核心在于:Test(1)是直接执行函数并返回void,而不是把“带参数的Test调用”作为一个可执行的逻辑传递给Function。原来定义的Function(Action<int>)只能接受一个需要int参数的方法引用(比如Test本身),但没法直接传递已经绑定了参数的调用。

要实现类似Function(Test(1))的调用效果,我们需要调整Function的定义,让它接受一个无参数的委托,然后把Test(1)包装成这个委托的执行逻辑。具体步骤如下:

1. 修改Function的定义

把Function改成接受Action类型的参数(无参数、无返回值的委托):

void Function(Action action)
{
    // 在需要的时候执行传入的逻辑
    action();
}

2. 调用时用Lambda包装带参的Test调用

调用Function的时候,用Lambda表达式把Test(1)包装成一个无参数的委托:

Function(() => Test(1));

这样写的效果就和你想要的Function(Test(1))逻辑一致了——当Function内部调用action()时,才会执行Test(1)。

额外说明:如果需要支持更通用的场景

如果你的Function需要处理各种不同参数的方法调用,可以定义泛型版本的重载,比如:

// 接受带一个参数的委托(绑定参数后执行)
void Function<T>(Action<T> action, T param)
{
    action(param);
}

// 调用方式:
Function(Test, 1);

不过这种方式和你最初想的Function(Test(1))写法不太一样,还是第一种Lambda包装的方式更贴近你的需求。

内容的提问来源于stack exchange,提问作者droyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:39:05