如何让函数支持接收带参数的函数调用作为入参?
解决方法:让函数接受无参数委托来包装带参调用
其实这个问题的核心在于: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
相关产品推荐
相关产品推荐

