C#中({/*代码块*/})();特殊语法的具体含义是什么?
语法含义解释
你看到的写法本质是先对一个返回委托类型的表达式求值,再立即调用返回的委托,核心逻辑可以拆成两步理解:
- 最外层的圆括号
()包裹的是一个完整的C#表达式,这段表达式的求值结果是一个可调用的委托实例(你给出的示例里是Action类型的委托) - 末尾的
()就是普通的委托调用语法,等价于拿到委托实例后再加()执行。
拿你给出的代码举例,完全可以拆成等价的常规写法:
// 第一步:执行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
相关产品推荐
相关产品推荐

