C# 12 switch语句括号数量合规性问询:两种写法为何均被编译器接受?
C# 12 Switch语句括号规范:哪种写法更合理?
首先明确:两个示例的代码在C#12编译器下都能正常编译运行,但从语法规范和设计意图来看,示例2的写法是更符合C#12新特性的标准写法,原因如下:
两种写法的本质区别
- 示例1:
switch ((value, Frozen))是将value和Frozen打包成一个元组实例后进行模式匹配,这是C#7及以后就支持的元组switch写法,并非C#12新增特性。 - 示例2:
switch (value, Frozen)是C#12专门引入的**多参数switch(参数化switch)**语法,允许直接将多个表达式作为switch的输入,不需要额外包裹元组括号,是为简化多条件模式匹配而设计的原生语法。
代码对比验证
示例1(元组兼容写法)
switch ((value, Frozen)) { case ( >= 0 and <= 9, false): break; case (_, false): break; case (_, true): break; }
示例2(C#12原生多参数写法)
switch (value, Frozen) { case ( >= 0 and <= 9, false): break; case (_, false): break; case (_, true): break; }
规范建议
虽然两种写法都能通过编译,但示例2的写法更简洁,也更贴合C#12新增特性的设计初衷,是官方文档推荐的多条件switch写法。示例1的写法属于利用元组兼容性的“兼容式写法”,并非针对多参数场景的最优选择。
内容的提问来源于stack exchange,提问作者Lars Holm
相关产品推荐
相关产品推荐

