内容主要来自《编写高质量代码-改善C#程序的157个建议》

本文来源:http://www.cnblogs.com/xiashengwang/p/4013668.html 来源作者:学无止境

感谢学无止境的文章

1、尽量避免装箱和拆箱、考虑使用StringBuilder来替代string、string.Format内部使用了StringBuilder,比较高效。

2、TryParse比Parse高效

3、使用int?确保值类型可以为null,值类型可以隐式转换为可空值类型。判断可空类型是否包含值可以用HasValue方法测试,还可以用??运算符简化代码。

4、使用dynamic来简化反射的调用。Dynamic是.net 4.0引入的一个新特性,编译器不会对dynamic类型的变量进行检查,我们可以在dynamic的变量上调用方法,检查属性值,而不必写繁琐的反射代码。Var关键字只是一个语法糖,编译器编译后会替换成具体的变量类型,而dynamic被编译后,会转换成object类型,对方法和属性等的调用C#内部本质还是用反射来做的,但这大大减轻了程序员的工作量。

5、多数情况下用foreach代替for循环

6、在多线程环境中使用ConcurrentBag(对应List),ConcurrentDictionary,ConcurrentQueue,ConcurrentStack。多线程访问普通集合硬考虑用lock来对集合进行安全锁定

7、谨慎集合属性的可写操作,用private set来进行控制

8、Lambda其实是一个简洁的委托,在使用linq查询中尽量使用=>

9、linq查询时要加上具体条件,如果只取一条数据要加上first(),如果去前5条用take(5)

10、总是优先考虑泛型,因为泛型代码有很好的重用性和类型安全性

11、用event关键字为委托施加保护,委托变量可以被恶意赋值为nul,加了event后,在编译的时候就是检查这个错误,对event声明的委托只能用+=和-=来赋值

12、尽量用using代码块,在using代码块中垃圾会得到自动清理

13、避免锁定不恰当的对象

14、可见字段应该重构为属性,属性比字段有更好的灵活性,可以加入代码控制,可以在类型内部实现线程安全访问,可以让类型得到通知(如WPF系统),这些都是字段所不具备的。当然,如果仅限于类型内部使用,应该用字段。

15、一个方法只做一件事情

16、避免过长的方法和类

17、不要重复代码

18、不要写冗余注释