如何用设计模式规避嵌套if语句?附C#代码示例求解决方案
优化嵌套if的方案:无需复杂设计模式,简洁写法搞定
当然有办法优化这段嵌套if的代码!其实你的场景不需要引入复杂的设计模式,用一些更直观的写法就能彻底消除嵌套,而且逻辑和原代码完全一致。
方案一:直接条件赋值(最直观)
这种写法把每个参数的判断拆分开,去掉嵌套,一眼就能看懂每个参数的取值逻辑:
private Message GetMessageFrom(string[] args) { string id = args.Length > 0 ? args[0] : null; string body = args.Length > 1 ? args[1] : null; string label = args.Length > 2 ? args[2] : null; string path = args.Length > 3 ? args[3] : null; return new Message(id, body, label, path); }
方案二:用LINQ简化处理(更紧凑)
如果想让代码更简洁,可以借助LINQ的Take和PadRight方法,把参数数组统一处理成固定长度的序列,不足的位置用null填充:
using System.Linq; private Message GetMessageFrom(string[] args) { var parameters = args.Take(4).PadRight(4, null).ToArray(); return new Message(parameters[0], parameters[1], parameters[2], parameters[3]); }
关于设计模式的补充
如果一定要关联设计模式的话,当前场景其实是简单参数解析,没必要用策略、工厂这类复杂模式。但如果未来你的参数规则变得复杂(比如参数顺序可变、需要验证、有默认值逻辑等),可以考虑:
- 建造者模式:分步构建
Message对象,把参数赋值的逻辑封装到建造者中 - 选项模式(.NET生态):用强类型的选项类来管理参数,配合配置绑定处理可选参数
不过就当前的简单需求来说,上面两种简洁写法已经足够好用了。
内容的提问来源于stack exchange,提问作者c-sharp
相关产品推荐
相关产品推荐

