把boolean 参数放到最后面(Put boolean arguments last)
在CodeProject上看到一篇有意思的文章,特翻译和分享下:
每当我看到一个方法调用如下:
Enum.TryParse(stringRepresentationOfEnum, true, out enumValue);
我就会想这个’true’ 参数代表的是什么意思呢。在这个例子中,基于我过去的经验我知道在这个方法中它代表的是ignoreCase 参数。
但是,如果这是一个你从未见过的完全不同的方法呢:
service.DoOperation(DateTime.Now, true, false, false, true, currentValue, userName);
这是一个特别XXX的方法。但是假设一下这就是这个方法必须要的签名,可悲的是,在这个方法想要明白boolean 参数的值的含义很难,
假设我们不能改变接口,我们还能做什么来让代码更清楚呢?
首先,我们可以为每个boolean值传递命名好的变量:
bool includeHeader = true;
bool checkSecurity = false;
bool validateDate = false;
bool fireCompletionEvent = true;
service.DoOperation(DateTime.Now, includeHeader, checkSecurity, validateDate, fireCompletionEvent, currentValue, userName);
除了代码有点不简洁外,这的确好了很多。
当然在C# 4.0 中,我们不需要这样做,相反我们可以使用命名参数:
service.DoOperation(DateTime.Now, includeHeader: true, checkSecurity: false, validateDate: false, fireCompletionEvent: false, currentValue, userName);
不幸的是,它并不能如期的正常运行 - 最后面的两个参数无法出现在命名参数的后面。
这意味着我们必须添加一些额外的代码:
service.DoOperation(DateTime.Now, includeHeader: true, checkSecurity: false, validateDate: false, fireCompletionEvent: false, currentValue: currentValue, userName: userName);
这就是为什么我建议把布尔参数放到参数列表的最后的原因:
service.DoOperation(DateTime.Now, currentValue, userName, includeHeader: true, checkSecurity: false, validateDate: false, fireCompletionEvent: false);
这的确清楚多了,但它确实需要你在设计你的方法签名时牢记这一点。
作者:LoveJenny
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库