C#中如何通过Switch语句执行多段代码块?
C# 实现多规则函数执行的方案
C# 里普通switch语句不允许重复定义同一个case值,你写的那种包含重复case 'A'、case 'B'的代码直接编译会报错,但有几种实用方式能实现你要的逻辑:
1. 拆分判断(简单直接)
先处理单个值对应的函数,再单独判断组合条件执行对应函数,逻辑清晰易懂:
char v = 'A'; // 执行单个值绑定的函数 switch (v) { case 'A': Func1(); break; case 'B': Func2(); break; case 'C': Func3(); break; case 'D': Func5(); break; } // 执行组合条件绑定的函数 if (v == 'A' || v == 'C') Func4(); if (v == 'B' || v == 'D') Func6();
2. Switch表达式+委托列表(C# 8.0+)
用switch表达式直接映射每个字符对应的函数集合,统一管理规则,扩展方便:
// 先定义你的函数示例 void Func1() => Console.WriteLine("执行Func1"); void Func2() => Console.WriteLine("执行Func2"); void Func3() => Console.WriteLine("执行Func3"); void Func4() => Console.WriteLine("执行Func4"); void Func5() => Console.WriteLine("执行Func5"); void Func6() => Console.WriteLine("执行Func6"); char v = 'B'; // 映射每个字符对应的所有待执行函数 var actions = v switch { 'A' => new List<Action> { Func1, Func4 }, 'B' => new List<Action> { Func2, Func6 }, 'C' => new List<Action> { Func3, Func4 }, 'D' => new List<Action> { Func5, Func6 }, _ => new List<Action>() // 处理未定义的字符 }; // 遍历执行所有绑定的函数 foreach (var action in actions) action.Invoke();
3. 字典映射(适合动态调整规则)
把字符和对应的函数列表存入字典,适合需要运行时修改规则的场景:
// 提前构建映射字典 var actionMap = new Dictionary<char, List<Action>> { { 'A', new List<Action> { Func1, Func4 } }, { 'B', new List<Action> { Func2, Func6 } }, { 'C', new List<Action> { Func3, Func4 } }, { 'D', new List<Action> { Func5, Func6 } } }; char v = 'C'; // 查找并执行对应函数 if (actionMap.TryGetValue(v, out var actions)) { foreach (var action in actions) action(); }
内容的提问来源于stack exchange,提问作者Disti
相关产品推荐
相关产品推荐

