不论我们学习了多少.net理论,最终还是要体现在代码中,下面总结一些C#方面的Best Practices。对于一些常见的代码规定,例如,命名规则,这里就不重复了。
不好的代码:
1.重复
2.复杂,难以理解
3.效率低下
4.有bug
针对这几项,写代码时需要注意处理一下问题:
1.如何给包含switch的语句处理异常?
bad:为每一个case语句都添加try catch语句,这样的代码看着很丑陋,而且逻辑不明晰。可以将异常捕捉代码放在switch外面,根据不同的处理分支,抛出不同的异常,这样的结构比较清晰。
2.如何重新抛出异常?
使用throw,而不是throw e。因为throw可以保留stack info。
3.不要随意的调用GC.Collect。因为调用GC.Collect去收集垃圾对象的开销很大,基本上,收集一个垃圾对象和收集一千个垃圾对象的效率是差不多的。所以,如果不是非常必要,不要手动调用该方法。
4.对于一些实现了IDisposable接口的对象,例如:StreamReader,记得使用using语句或者类似using功能的(就是try+finally)代码,保证异常发生时,也会释放这些对象的资源。
5.不要给局部变量赋null值(当然是引用类型对象了),除非我们确定在这个方法中很可能发生垃圾回收。
6.减少使用InvokeMember。这个方法的效率比较低下。可以使用接口。具体可以参阅Effective C#。
7.不要使用lock(this) 或者lock(typeof(<x>))这样的语句,使用一个私有变量来作为key,例如:
Object o = new Objec();
lock(o)
...
不要锁住一个用户可见的对象。