下面这段代码:
 while (rd.Read())
  {
  if (rd["sffy"].ToString() != "")
  {
  int num = int.Parse(rd["sffy"].ToString());
  sum = sum + num;
    
  }有的高手说:给int num = int.Parse(rd["sffy"].ToString());加一个try。有必要吗?不是判断过“if (rd["sffy"].ToString() != "")”,不为空才执行(int.Parse)转化的吗?为什么还有加Try,还会发生什么类型的异常?

解决方案 »

  1.   

    确实是不为空才往下执行,但是rd["sffy"].ToString() 的值万一是字符类,汉字,怎么办。所以加个try是正确的!
      

  2.   

    while(rd.Read())
      {
        sum += rd["sffy"]==DBNul.Value?0:Convert.intInt32(rd["sffy"]); 
      }
    int TryParse判断是否数字
      

  3.   


    在下知道哪里发生的错误了。sum += rd["sffy"]==DBNul.Value?0:Convert.intInt32(rd["sffy"]); 
    拆开是不是该这样写?if(rd["sffy"]==DBNul.Value)
    {
       sum=sum+0;
    }
    else
    {
       sum=sum+Convert.toInt32(rd["sffy"]);
    }对吧?
      

  4.   

    你写的没错,但是加0就可以省略了吧?if(rd["sffy"]!=DBNul.Value)
    {
      sum=sum+Convert.toInt32(rd["sffy"]);
    }
      

  5.   

    异常处理属于不得已而为之,此例中完全可以用TryParse()避免异常的发生。