技术开发 频道

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

  •   在大型数据集上使用foreach

  大部分开发人员更喜欢使用foreach循环,而无视for循环,因为foreach更容易使用,但操作大型数据集时,使用foreach已经被证明是代价高昂的,在下面的代码中,我同时使用for和foreach遍历相同的数据库,在图1中显示了两种循环方法消耗的时间。

static void Main(string[] args)
  {
      DataTable dt
= PopulateData();
      Stopwatch watch
= new Stopwatch();
  
      
//For loop
      watch.Start();
      
for (int count = 0; count < dt.Rows.Count; count++)
      {
          dt.Rows[count][
"Name"] = "Modified in For";
      }
      watch.Stop();
      Console.WriteLine(
"Time taken in For loop: {0}", watch.Elapsed.TotalSeconds);
  
      
//Foreach loop
      watch.Start();
      foreach (DataRow row in dt.Rows)
      {
          row[
"Name"] = "Modified in ForEach";
      }
      watch.Stop();
      Console.WriteLine(
"Time taken in For Each loop: {0}", watch.Elapsed.TotalSeconds);
  
      Console.ReadKey();
  }

1

  图 1 for和foreach循环遍历相同数据库消耗的时间对比

 
  从上图可以看出,foreach循环明显要慢一些,它消耗的时间几乎是for循环的两倍,这是因为foreach循环中的dt.Rows要访问数据库中的所有行。因此需要遍历大型数据集时最好使用for循环。

  •      验证简单的原始数据类型

  大多数开发人员都不知道内置的验证原始数据类型的方法,如System.Int32,因此很多人都是自己实现的,下面就是一个自己实现的验证一个字符串是否是数值的代码:

public bool CheckIfNumeric(string value)
  {
      bool
isNumeric = true;
      try
      {
          
int i = Convert.ToInt32(value);
      }
      catch(FormatException exception)
      {
          
isNumeric = false;
      }
      return
isNumeric;
}

 

  它使用了try catch语句,因此不是非常好的的做法,更好的办法是象下面这样使用int.TryParse:

  int output = 0;
  bool
isNumeric = int.TryParse(value, out output);

 
  根据我的经验,int.TryParse是更快,更简洁的方法。  

0
相关文章