C#系列之代码之坑–编译器不会告诉你的那些事

There is nothing permanent except change. 唯变化永恒不变
-[英]赞格威尔

You have to pay for your decision. 你所做的一切决定,都是有代价的,或是性能,或是灵活性,没有最优解,你需要自己去权衡。
正坤

这些一个个的零散的小点都是在日常工作中总结出来的,似乎没有哪一本编程书会讲这些,所以就总结出来放到这里

小心循环

不要在循环里写循环体公用的初始化方法,应该在循环外只初始化一次
Wrong:

上面例子可以看到,每次循环都需要请求一次GetList(),并且获取到的List不会被更改,因此每次循环时nameList都是一样的,这时应该把GetList()方法的调用提出循环体
Correct:

传值 Vs 传引用 Vs 传副本 Vs 传求值方法 Vs 私有字段

传值

优点: 简单
缺点: 任何更改对原值不起作用

传引用

优点: 更改会对原值起作用,一次改动可以影响所有引用该对象的地方
缺点: 不注意会引起副作用

传副本

优点: 保护了源数据不被更改
缺点: 序列化反序列化可能造成性能问题

求值方法

优点: 每次都能得到最新的值
缺点: 每次都重新计算值,可能造成性能问题

私有字段

优点: 方便
缺点: 不好追踪值是在什么时候被改掉的

空对象模式

通过对缺失对象的封装,以提供默认无任何行为的对象替代品。

封装字段 & 封装对象

数据完整性
Wrong:

Right:

封装集合(mutable)

卫语句

函数中的条件逻辑使人难以看清正常的执行途径。使用卫语句表现所有特殊情况。

动机:条件表达式通常有2种表现形式。第一:所有分支都属于正常行为。第二:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况。

这2类条件表达式有不同的用途。如果2条分支都是正常行为,就应该使用形如if…..else…..的条件表达式;如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。这样的单独检查常常被称为“卫语句”。卫语句常用于数据校验,并且上面的逻辑“保卫”了下面的逻辑。

使用卫语句

保持接口稳定

增加了地址

Wrong:

Right:

打赏

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.