c#几个经常犯错误汇总

c#几个经常犯错误汇总

ID:35318280

大小:21.00 KB

页数:6页

时间:2019-03-23

c#几个经常犯错误汇总_第1页
c#几个经常犯错误汇总_第2页
c#几个经常犯错误汇总_第3页
c#几个经常犯错误汇总_第4页
c#几个经常犯错误汇总_第5页
资源描述:

《c#几个经常犯错误汇总》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错误,注重编程之美,代码的优雅,总结几个平常经常犯的错误。1、在C#编程中,字符型类型是最容易处理出错的地方,代价是非常昂贵,在.NetFramwork中,字符串是一个相当特别的引用类型,string本省就是一个不可继承的密封类,但是它具有了值类型所应用的特点,但是它在CLR中内存还是保存于托管堆之上,也就是说,当我们每次定义一个字符串类型的时候,就在堆内存中开辟一

2、端内存,而当我们字符串被修改之后,它会创建一个新的内存,注意这里的内存是不连续的,而是通过修改栈内地址引用而拼凑字符串,不会改变源字符串在内存中的地址,所以有些程序员总是喜欢使用这样的方法格式化字符串:stringSelectText="select*from"+TableName+"whereUserName='"+Name+"'";上述代码,使用了字符串拼凑的方法,因为使用了多重串联,因此会在内存中创建两个不必要的字符串垃圾副本。其实在C#中,已经为我们提供了StringBuilder和String.Fromat来解决此问题,虽然他们可以实现同样的功能,但

3、是他们有质的变化,StringBuilder在内存中开辟的是一段连续内存,当增加新字符串时候,它会在栈中指向的同一个堆内存中连续存放字符,这就形成了性能的提升。所以我们将上面代码改成:stringSelectText=string.Format("select*from{0}whereUserName={1}",TableName,Name);2、大多数开发人员都不知道内置的验证数据类型的方法,如System.Int32,因此很多人都是自己实现的,其实这是不妥的,因为这些基本类型中都存在自己固有的类型验证方法,下面这个就是自己实现验证的一个字符串是否是数值的代

4、码:publicboolCheckIfNumeric(stringvalue){boolIsNumeric=true;try{inti=Convert.ToInt32(value);}catch(FormatExceptionexcepiton){IsNumeric=false;}returnIsNumeric;}复制代码虽然使用了trycatch语句,这不是最佳的做法,更好的方法是下面使用Int.TryParse;intoutput=0;boolIsNumeric=int.TryParse(value,outoutput);复制代码int.TryParse是

5、更快、更简洁的方法。3、自己利用IDisposable接口手动释放内存在.NETFramework中,对象的处理和使用一样重要,理想的方法是在使用完对象的时候,在类中实现IDisposable接口中的dispose方法进行内存的释放,当然在.Net本身提供的垃圾回收机制(GC)中就提供了这样的功能,在我们实例化类对象时,在类本身的析构函数中会调用dispose方法,GC在各级内存堆满的情况下,自动检查对象使用情况,去相应的释放内存,但是运行在非托管平台上的方法,需要我们自己手动释放内存,比如我们常见的SqlConnection对象,也就有了下面的创建、使用和处

6、理方法:publicvoidDALOneMethod(){SqlConnectionconnection=null;try{connection=newSqlConnection("。。。。。。。。。。。");connection.Open();//sqlcommand。。run}catch(Exceptionexception){//managerexception}finally{connection.Close();connection.Disopse();}}复制代码上述代码是大部分程序员会出现的代码,乍看没啥问题,连接处理在最后一个代码中被明确调用,

7、但是如果发生了一个异常,catch代码块就被执行,然后再执行最后一个代码块处理连接,因此在最后一个代码块执行之前,连接将一直留在内存中,大部分我们会在此处记录错误,一般涉及到IO操作,如果延时时间比较长的话,这个连接将在内存时间长时间停留。我们一个原则就是当对象不再使用的时候我们里面释放资源。我们采用程序逻辑域来处理这个问题会更好:publicvoidDALOneMethod(){using(SqlConnctionconnection=newSqlConnection("。。。。。。。")){connction.Open();//doSUAD}}复制代码当使

8、用using代码快时,对象上的disp

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。