一些C# Best Practices

来源:互联网 发布:淘宝开店app 编辑:程序博客网 时间:2024/05/04 08:52

不论我们学习了多少.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)

...

 

不要锁住一个用户可见的对象。