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

C#中({/*代码块*/})();特殊语法的具体含义是什么?

语法含义解释

你看到的写法本质是先对一个返回委托类型的表达式求值,再立即调用返回的委托,核心逻辑可以拆成两步理解:

  1. 最外层的圆括号()包裹的是一个完整的C#表达式,这段表达式的求值结果是一个可调用的委托实例(你给出的示例里是Action类型的委托)
  2. 末尾的()就是普通的委托调用语法,等价于拿到委托实例后再加()执行。

拿你给出的代码举例,完全可以拆成等价的常规写法:

// 第一步:执行switch表达式,得到对应的Action委托
Action action = stringValue switch
{
    "Add" => (Action) Add,
    "Subtract" => Subtract,
    _ => throw new ArgumentOutOfRangeException()
};
// 第二步:调用委托
action();

你提到的({/* 若干行代码 */})();是这类写法的通用形式,括号里的代码只要最终返回可调用的委托/函数指针,就可以用这种方式直接执行,不需要额外声明临时变量存储委托实例。

常见使用场景

  • 简化仅需要单次执行的分支逻辑,避免声明无用的临时变量
  • 可以在字段初始化、属性初始化这类只能写表达式的上下文里嵌入分支逻辑后直接执行

注意点

  • 括号里的表达式必须返回可调用的类型(比如Action、Func<T>等委托类型,或者C# 9+支持的函数指针),否则编译会报错
  • 示例里的switch是C# 8引入的switch表达式语法,本身就是有返回值的表达式,刚好符合这种写法的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:03