第二次CODE REVIEW (d)

系列文章:第一次CODE REVIEW 
              http://www.cnblogs.com/ttaqt/archive/2008/05/18/1202010.html

第二次code view ....被人冤枉203330638.gif没有研究“为什么”......没有研究为什么就不会有这系列的文章啦,可惜他不知道,哈哈。大家继续跟我一起讨论讨论吧。记得上次讨论了一下string比较的问题,我觉得如果能用Equals 就用咯,毕竟它是最最安全的值比较的方式,反正也没有什么损失。好,我们继续总结一下。。。。 :)

1. 对于函数,参数要尽量进行校验。NULL和EMPTY的校验是最最基本的。
   Don`t:
   public void MyFunction(string abc)
   {
          //直接使用或者在使用时校验
   }
   Do:
   public void MyFunction(string abc)
   {
          if(string.IsEmptyOrNull(abc))
           {
                  throw new Exception("abc is null or empty");
            }
           //其他校验,throw new Exception(....);
           //使用abc
    }
    Reason:
    可以确保函数稳定性。不知道是不是习惯了的原因。都为都是我自己调用自己的函数,模块的交互也是我写的。所以也没有注意这些。不知道你们也是不是呢?快去CHECK 一下自己的函数吧。

2. Try Catch 只包住需要捕捉异常
Don`t:

None.gif                  try
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {            

InBlock.gif
            logSavePath = Path.GetTempPath() + LogSaveFolder;
InBlock.gif

InBlock.gif
            if (!Directory.Exists(logSavePath))
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif
InBlock.gif    

InBlock.gif
                    Directory.CreateDirectory(logSavePath);
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif                }

None.gif              
catch (ex)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//写日志
ExpandedBlockEnd.gif
}

None.gif


   Do:

None.gif           
None.gif
            logSavePath  =  Path.GetTempPath()  +  LogSaveFolder;
None.gif
             if  ( ! Directory.Exists(logSavePath))
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                

InBlock.gif
                    Directory.CreateDirectory(logSavePath);
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch (Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
throw new Exception(ex.Message + "Log_SaveAddress:" + logSavePath);
ExpandedSubBlockEnd.gif                }

ExpandedBlockEnd.gif            }

None.gif

    Reason:
    说是TRY CATCH 有损耗的,不要乱用

3. 只针对”==”才用const左边的原则
Do:    if(3>=a)

    Don`t:    if(a<=3)

    Reason:   是行业准则

4. 过于非托管代码,使用时候要注意内存的释放。不要以为.NET就不用管理内存哦 :)
Don`t :   

None.gif IntPtr buffer  =  Marshal.AllocHGlobal(piCount  *  Marshal.SizeOf( typeof (CONADefinitions.CONAPI_DEVICE)));
None.gif
//  使用buffer
None.gif
Marshal.FreeHGlobal(buffer);

     Do:

None.gif IntPtr buffer  =  IntPtr.Zero;
None.gif
None.gif
try
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    buffer 
= Marshal.AllocHGlobal(piCount * Marshal.SizeOf(typeof(CONADefinitions.CONAPI_DEVICE)));
InBlock.gif    
//使用buffer
ExpandedBlockEnd.gif
}

None.gif
catch (ex)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   ..
ExpandedBlockEnd.gif}

None.gif
finally
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   Marshal.FreeHGlobal(buffer);
ExpandedBlockEnd.gif}

    Reason:
原因也不多说了。无论是数据库,IO读写文件,还有MARSHAL这个申请非托管内存的东东,都是这种写法啦。不过,正如C# effective所说,用USING也可以。不过基于它实现了IDisposiable 的基础上。而这个MARSHAL没有实现,如果你想的话,可以封装一下这个类,帮她实现dispose 的方法,里面填的就是finally里面的东东咯。

5. 例如string 没有被初始化,后面的程序是不能使用的。所以用NULL来初始化它,逃过编译器的变态检测。
Don`t:
String abc = string.Empty;
//使用abc

Do:
String abc = Null;
//使用abc

      Reason:
因为string.Empty占内存咯。

6. 使用表驱动法(关于具体的介绍,代码大全2和http://www.cnblogs.com/shinn/archive/2008/04/16/1157141.html 都有。
Don`t:
if(fileInfo.Extension.ToLower() == ".aa"||fileInfo.Extension.ToLower()==".bb"||.......)
{
        retrun true
}
Do:

None.gif             FileInfo fileInfo  =   new  FileInfo(fileName);
None.gif            
if  ( " .aa:.bb:.cc " .Contains(fileInfo.Extension.ToLower()))
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
return true;
ExpandedBlockEnd.gif            }

None.gif            
else
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
return false;
ExpandedBlockEnd.gif            }

转载于:https://www.cnblogs.com/ttaqt/archive/2008/05/28/1209043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值