C# switch expression如何合并常量与when条件避免代码重复?
C# 中 switch 表达式的 when 子句是整个分支的附加约束,不能作为 or 模式的独立子项,所以你之前加括号的写法不符合语法规则。这里提供两种无重复代码的实现方案:
方案1:所有条件放入when子句(兼容所有支持switch表达式的C#版本)
把字符匹配和字符串包含判断都放到同一分支的when条件中,用逻辑或连接,无需拆分分支:
var result = ch switch { _ when ch == 'a' || str.Contains("action a") => DoA("some", "parameters"), _ when ch == 'b' || str.Contains("action b") => DoB("some", "parameters"), _ when ch == 'c' || str.Contains("action c") => DoC("some", "parameters"), _ => new Exception("") // 若需要抛出异常请改为 throw new Exception("") };
方案2:元组模式(C# 9及以上版本推荐)
将ch和str打包为元组进行匹配,直接用or连接两种匹配场景,逻辑更直观:
var result = (ch, str) switch { ('a', _) or (_, var s when s.Contains("action a")) => DoA("some", "parameters"), ('b', _) or (_, var s when s.Contains("action b")) => DoB("some", "parameters"), ('c', _) or (_, var s when s.Contains("action c")) => DoC("some", "parameters"), _ => new Exception("") };
这种写法完全符合「字符匹配或者字符串包含对应内容就触发对应方法」的预期逻辑,不会出现条件优先级错误,也没有重复的方法调用代码。
内容的提问来源于stack exchange,提问作者user3459685
相关产品推荐
相关产品推荐

