技术开发 频道

看似简单!解读C#程序员最易犯的7大错误

    【IT168 专稿】编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误。

  •   格式化字符串

  在C#编程中,字符串类型是最容易处理出错的地方,其代价往往也很昂贵,在.NET Framework中,字符串是一个不可变的类型,当一个字符串被修改后,总是创建一个新的副本,不会改变源字符串,大多数开发人员总是喜欢使用下面这样的方法格式化字符串:

string updateQueryText = "UPDATE EmployeeTable SET Name='" + name + "' WHERE EmpId=" + id;

 
  上面的代码太乱了,由于字符串是不可变的,这里它又使用了多重串联,因此会在内存中创建三个不必要的字符串垃圾副本。

  最好的办法是使用string.Format,因为它内部使用的是可变的StringBuilder,也为净化代码铺平了道路。

string updateQueryText = string.Format("UPDATE EmployeeTable SET Name='{0}' WHERE EmpId={1}", name, id);

 
  •   嵌套异常处理

  开发人员喜欢在方法的末尾加上异常处理的嵌套方法,如:

public class NestedExceptionHandling
  {
      
public void MainMethod()
      {
          try
          {
              
//some implementation
              ChildMethod1();
          }
          catch (Exception exception)
          {
              
//Handle exception
          }
      }
  
      
private void ChildMethod1()
      {
          try
          {
              
//some implementation
              ChildMethod2();
          }
          catch (Exception exception)
          {
              
//Handle exception
           throw;
  
          }
      }
  
      
private void ChildMethod2()
      {
          try
          {
              
//some implementation
          }
          catch (Exception exception)
          {
              
//Handle exception
              throw;
          }
      }
  }

 

  如果相同的异常被处理多次,上面的代码会发生什么?毫无疑问,性能开销将会剧增。

  解决办法是让异常处理方法独立出来,如:

public class NestedExceptionHandling
  {
      
public void MainMethod()
      {
          try
          {
              
//some implementation
              ChildMethod1();
          }
          catch(Exception exception)
          {
              
//Handle exception
          }
      }
  
      
private void ChildMethod1()
      {
          
//some implementation
          ChildMethod2();
      }
  
      
private void ChildMethod2()
      {
          
//some implementation
      }
  }

 

0
相关文章