如何简化C#中多匹配值返回相同结果的switch表达式?
问题原因
你使用的or多匹配模式是C# 9.0及以上版本才支持的语法特性,如果你的项目目标框架低于.NET 5,或者手动指定的C#语言版本低于9.0,就会出现编译错误。
解决方案
方案1:高版本C#直接使用or语法
如果可以调整项目配置,将目标框架升级为.NET 5+,或者在项目属性中将C#语言版本设置为9.0及以上,你写出的简化代码本身就是合法的,可直接运行:
public static void Main(string[] args) { int level = 5; var indicator = level switch { 1 => "C", 2 or 3 or 5 or 6 => "R", _ => "D" }; Console.ReadKey(); }
方案2:低版本C#兼容写法(适用C# 8.0,支持switch表达式的最低版本)
无法升级语言版本时,可以通过when条件从句+集合包含判断实现同等逻辑:
public static void Main(string[] args) { int level = 5; var indicator = level switch { 1 => "C", _ when new []{2,3,5,6}.Contains(level) => "R", _ => "D" }; Console.ReadKey(); }
如果担心每次判断生成新数组的性能问题,可以提前把匹配值集合定义为静态只读变量。
方案3:更低版本C#兼容(无switch表达式支持)
如果使用的C#版本低于8.0,只能退回到传统switch语句实现:
public static void Main(string[] args) { int level = 5; string indicator; switch (level) { case 1: indicator = "C"; break; case 2: case 3: case 5: case 6: indicator = "R"; break; default: indicator = "D"; break; } Console.ReadKey(); }
内容的提问来源于stack exchange,提问作者AdvancingEnemy
相关产品推荐
相关产品推荐

