惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
小众软件
小众软件
量子位
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
博客园_首页
IT之家
IT之家
S
SegmentFault 最新的问题
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
月光博客
月光博客
有赞技术团队
有赞技术团队
H
Help Net Security
云风的 BLOG
云风的 BLOG

博客园 - stu_acer

对C#对象的Shallow、Deep Cloning认识【转】 PowerShell 启动应用程序【转】 几个收藏的根据数据库生成Insert语句的存储过程[修正版] SQL Server删除外键约束 IE6下PNG图片透明显示解决方法(From QQ) 用Regex类计算一个字符串出现次数是最好方法【转载】 C#有关Session 操作的几个误区【转】 - stu_acer - 博客园 DataList绑定数据到泛型类(Dictionary) 【转】 重写Asp.NET2.0 TreeView的折叠/展开方法(TreeView_ToggleNode) javascript window.close() 去掉那讨厌的确认对话框【转】 thickbox使用技巧【转】 - stu_acer - 博客园 jQuery操作checkbox的例子(全选,反选,获取选取值)【转】 查看SQL Server 2005版本号 创建SQL索引,查看SQL性能语句收集 ddlevelsmenu在IE6下,与select冲突的解决办法【整理】 IE6 Select元素无法被div等元素覆盖的bug解决办法【zz】 利用Attribute和反射从模板生成短信 - stu_acer - 博客园 Session & Cookie 的使用建议(zz) - stu_acer AdventureWorks、Northwind、pubs示例数据库下载
把boolean 参数放到最后面(Put boolean arguments last)【...
stu_acer · 2012-09-06 · via 博客园 - stu_acer

在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);

这的确清楚多了,但它确实需要你在设计你的方法签名时牢记这一点。

原文链接:把boolean 参数放到最后面(Put boolean arguments last)

E文链接:Put boolean arguments last [Technical Blog]