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

含Action委托的C#代码为何能无问题执行?请解析原因

这段C#代码的执行逻辑与无报错原因解析

嘿,我来帮你拆解这段代码的运行逻辑,还有它看起来带了个网址却能正常执行的奥秘~

一、先理清执行逻辑

首先咱们把代码里的“干扰项”去掉,还原成编译器实际识别的版本:

static void Main(string[] args) 
{
    // 第一步:创建一个Action委托,绑定到名为add的方法
    Action<int, int> ActionDelegate = new Action<int, int>(add);
    // 第二步:调用委托,本质就是执行add(130, 45)
    ActionDelegate.Invoke(130, 45);
}

// 注意:这段代码必须存在(用户没写但实际要有)
static void add(int num1, int num2)
{
    // 比如做加法输出或者其他操作,比如 Console.WriteLine(num1 + num2);
}

执行流程很直白:

  1. 程序启动进入Main方法,先实例化一个Action<int, int>类型的委托,把它和add方法绑定在一起——Action<int,int>本身就是C#预定义的委托类型,专门用来指向“无返回值、接受两个int参数”的方法;
  2. 调用委托的Invoke方法传入130和45,这就相当于直接调用add(130,45),触发方法执行。

二、为什么带网址的代码不会报错?

你肯定注意到代码里混了http://csharpstar.com,这其实是个“巧合”的语法组合:

  • 首先http:是C#里合法的标签(Label)——标签原本是给goto语句用的跳转标记,语法就是「标识符+冒号」,http是合法的标识符,所以http:完全符合语法,哪怕你没用到goto跳转它,编译器也不会找你麻烦;
  • 紧接着的//csharpstar.com是单行注释——C#里只要碰到//,后面的所有内容都会被编译器直接忽略,不会参与编译。

所以在编译器眼里,那一行代码其实是分成了两部分:

Action<int, int> ActionDelegate = new Action<int, int>(add); 
http: //csharpstar.com

一个正常的委托赋值语句,加上一个没用但合法的标签,再加上一段被忽略的注释——自然不会报错。

最后还有个隐藏前提:你的代码所在的类里必须有一个add方法,它的签名得完全匹配Action<int,int>的要求——也就是返回值是void,参数是两个int。要是这个方法不存在,代码才会报错,否则就能顺利编译执行啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:43:11