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

如何在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);
    });
}

执行逻辑说明

  1. 调用a.C时,传入的无参Action会先被执行一次:调用a.B(2),循环输出2行Executing B..
  2. 接着执行Console.WriteLine("Executing C.."),输出对应内容
  3. 最后再次执行传入的Action,再次调用a.B(2),输出2行Executing B..

执行后会完全符合你的预期输出:

Executing B..
Executing B..
Executing C..
Executing B..
Executing B..

内容的提问来源于stack exchange,提问作者fmj.SO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:34:56