C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。
同时。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
本文整理了C#开发和使用过程中的15个小技巧,希望能对大家的实际开发带来真正的方便。
1、使用StringBuilder代替使用string 连接符 "+"
说明:String类对象是不可变的(只读),一旦创建该对象,就不能修改该对象的值。
对象String对象的重新赋值,本质上是重新创建了一个String对象并将新的值赋值给该对象。如果字符串存在较多次的拼接时候,最后使用StringBuilder类,需要引用命名空间 System.Text。
该类不是创建新的对象,而是通过Append、Insert、Remove等方法对字符串直接进行操作,最后通过ToString方法返回操作结果。从而避免创建大量对象,造成资源浪费、性能降低。
不要这样写:
推荐这样写:
2、用foreach 代替 for 循环
如果是可以使用foreach的时候,尽量用foreach,而不是 for。前者的效率比后者要高很多。
3、使用HashTable 代替其他字典集合类型(如 StringDictionary、NameValueCollection),存放少量数据的时候可以使用HashTable。
4、避免使用ArrayList
因为ArrayList使用的时候存在装箱、拆箱会造成性能的损失,可以用泛型来代替。
5、如果是字符进行比较的时候可以采用String.Compare,它会忽略大小写进行比较,而不要使用UpperCase、Lowercase转换后进行比较。
6、如果只是从xml对象中读取数据,可以用只读的XPathDocument代替XMLDocument,可以提高性能。
7、C#捕获异常的时候,不要使用通用的System.Exception。可以根据程序逻辑考虑可能出现的异常进行控制。
8、要避免在循环体内声明变量,如果可以的化,最好放在循环体外声明,在循环体内初始化。
9、采用using和try/finaly来做资源清理。
10、不要使用异常(Exception)来控制程序的流程。因为捕获异常对性能的损耗很大,最好不要用异常去控制程序的流程。
11、使用值类型的ToString方法避免装箱操作。
因为值类型到引用类型会造成性能的损耗,所以使用值类型的ToString方法可以避免装箱造成的性能损耗。
12、避免滥用反射,反射也是比较浪费性能的操作
当使用反射来调用类型或者触发方法,或者访问一个字段或者属性是,CLR需要做很多工作:校验参数、检查权限……所以非常耗时,因此这样的情况下要尽量避免反射的使用。
13.使用using语句进行别名,这个方法适合针对结构体。
因为很多时候编程上需要做Win32平台相关的一些工作,比如我要读取一个Unicode字符,但C#并没有双字Word类型,如果我们要支持双字,那么就需要自己定义类或者结构体,但实际上在C++里面,双字实际上是unsigned short,也就是说我们可以用UInt 16来实现对Word关键字的支持,但这里有一个小小的纠结,那就是我知道Word是Unsigned Int16,但是能不能定义成Word呢?这样方便我们记忆啊。
但是有的,这时候我们只需要使用using语句就可以了。做法是这样子的:
这样就可以使用Word关键字声明变量了。
14.定义值类型时,它的大小不要超过16字节,否则影响性能(频繁复制时),要么改为使用引用类型,要么让它按ref引用传递。
15.字符串操作
●字符串字面量、字符串常量,直接用"+"相连效率高,因为:string str = "srf"+"ttt"+"ccc";会直接编译成string str = "srftttccc";,同样适用于字符串常量。
●尽量避免对变量的装箱:字符串+变量,较好的做法是:字符串+变量.ToString()
●频繁操作字符串时用StringBuilder,并制定足够大的容量,而string.Format("{0}{1}{2}",str1,str2,str3);内部也是用StringBuilder。
C#的开发是一个长期的工作,从基础开始,把握好一些技巧的应用,相信通过你的努力,一定能开发出有创意的C#程序。