如何在C#中跨作用域传递Action并获得预期执行结果?
问题分析与修正方案
你的代码无法正常运行的核心问题是传入A.C方法的lambda表达式不符合Action委托的定义:Action是无参数、无返回值的委托,但你给lambda添加了一个不存在的参数likePredicate,且错误地试图通过这个参数调用B方法。
修正后的完整代码
public class A { public void B(int num) { for (int i = 0; i < num; i++) Console.WriteLine("Executing B.."); } public void C(Action action) { action(); Console.WriteLine("Executing C.."); action(); } } public static void Main(string[] args) { int z = 2; var a = new A(); // 修正:传入无参的Action,直接调用当前a实例的B方法 a.C(() => { a.B(z); }); }
执行逻辑说明
- 调用
a.C时,传入的无参Action会先被执行一次:调用a.B(2),循环输出2行Executing B.. - 接着执行
Console.WriteLine("Executing C.."),输出对应内容 - 最后再次执行传入的Action,再次调用
a.B(2),输出2行Executing B..
执行后会完全符合你的预期输出:
Executing B.. Executing B.. Executing C.. Executing B.. Executing B..
内容的提问来源于stack exchange,提问作者fmj.SO
相关产品推荐
相关产品推荐

