找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2969|回复: 7

15个实用C#编程技巧总结

  [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-1-11 20:38:27 | 显示全部楼层 |阅读模式
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#程序。

工控课堂 www.gkket.com

0

主题

109

回帖

272

积分

注册会员

积分
272
发表于 2021-1-12 04:14:30 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

298

回帖

1949

积分

高级会员

积分
1949
发表于 2021-1-12 06:22:50 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

100

回帖

164

积分

新手上路

积分
164
发表于 2025-11-30 19:10:45 | 显示全部楼层
打卡路过,支持优质原创内容~
工控课堂 www.gkket.com

0

主题

48

回帖

53

积分

新手上路

积分
53
发表于 2025-11-30 19:40:10 | 显示全部楼层
蹲一波同款,有没有姐妹 / 兄弟推荐?
工控课堂 www.gkket.com

0

主题

473

回帖

2666

积分

高级会员

积分
2666
发表于 2025-12-3 08:07:21 | 显示全部楼层
路过混个脸熟,顺便为优质内容打 call~
工控课堂 www.gkket.com

0

主题

107

回帖

170

积分

新手上路

积分
170
发表于 2025-12-5 20:27:09 | 显示全部楼层
占个楼慢慢看,先马克一下
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

104

回帖

158

积分

新手上路

积分
158
发表于 2025-12-10 21:11:45 | 显示全部楼层
赞同 + 10086,完全说出了我的想法!
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 16:01 , Processed in 0.105227 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表