最近有点疑惑,异常捕获该如何使用呢?        
        我习惯于
        try{}
        catch(SystemException se)
        {
               ;
        }
        这样的用法。catch 快里面基本不使用se。也就是说,catch主要防止程序down掉。
        看了一下最近的一个项目,总共有180多个warning,都是类似 The variable 'se' is declared but never used 的。
        希望大家都来谈谈使用try catch的体会……。也希望高手能给予指点。
        因为是论坛新人,总共只有20分,都拿出来了。希望大家不要见怪。

解决方案 »

  1.   

    try ....catch()中只要写你关闭的那个异常,比如:你定义的异常,然后捕获后,你最好以日志的形式打印出来,这样你才知道出现了异常,否则你不进行任何处理,那么即使程序执行的逻辑不对了,你也不知道错在什么地方。。虽然你的程序不会非法操作;但运行结果却是错误的,使你无从下手找出错误
      

  2.   

    对的。catch一般最好是把异常分细来。把可能发生的异常都写下。
      

  3.   

    把代码写成这样,就没有 warningtry{
    。。

    catch {}
      

  4.   

    try ....catch()中只要写你关闭的那个异常,比如:你定义的异常,然后捕获后,你最好以日志的形式打印出来,这样你才知道出现了异常,否则你不进行任何处理,那么即使程序执行的逻辑不对了,你也不知道错在什么地方。。虽然你的程序不会非法操作;但运行结果却是错误的,使你无从下手找出错误
    顶一楼的
      

  5.   

    把代码写成这样,就没有 warning try{ 
    。。 

    catch {}
    这种写法虽然避免了表面的错误,但是有可能隐藏致命的错误。不推荐。
      

  6.   

    你错了...这样用可不是为了“防止程序down掉”,这只是一种“偷懒”的省略写法...
    catch
    {
    throw;//继续抛出异常不可省略
    }
    只是因为底层不需要处理异常,继续抛出让上层去处理...以此类推...
      

  7.   

    一般来说只在最外层函数上才需要。因为该函数不能将Exception再往外抛了
    http://topic.csdn.net/u/20090423/11/aa4e511c-d6bc-4328-9aa2-a8141d5d8429.html
      

  8.   


    try{
    }
    catch(ArgumentNullException e)
    {
                 //可处理的异常

    catch
    {
                //未处理的异常
                throw new Exception();
    }
    finally
    {
                //Executing finally block.
    }
      

  9.   

    你可以在Catch后面只要异常类型,而去掉se什么的(如果不用)!
      

  10.   

    去掉 se什么的,这样就不会有 warning 了
      

  11.   

    (修改)try{
    }
    catch(ArgumentNullException e)
    {
                 //仅处理可处理的异常

    catch
    {
                //未处理的异常,交由上层处理(如ASP.NET 错误友好页 )
                throw;
    }
    finally
    {
                //Executing finally block.
    }
      

  12.   

    省力更省心办法就是去只写try {...}catch { }省掉异常信息。
    或是
    catch(SystemException se){
    Debug.WriteLine(se);
    }
      

  13.   

    try
    {}
    catch(Exception ex)
    {
     MessageBox.Show("错误:" + ex.Message, "系统提示");
    }
      一直这样用着,好像没有被warning
      

  14.   

    所谓“防止程序down掉”,只要在最外层做,而且只要一个人、几行语句来执行,其他程序员、程序段无权掩盖异常,如果没有本事处理异常就必须抛出。
      

  15.   

    catch了异常类型后最好还是把异常信息捕获出来,写到日志或者输出出来,有助于bug的定位修改
      

  16.   

    异常是不可以直接catch{}放掉的
    你自己做点小程序或者无虞,做大程序万一发现结果有问题,一查,满程序都是catch{},你去哪找BUG?
      

  17.   

                try
                {
                    using (DataAccess DataAcc = new DataAccess())
                    {
                        orderCode = DataAcc.GetCode((int)MemberCodeType.委托单号);
                        dtAdd.Rows[0].SetField<string>("order_code", orderCode);                    if (dtAddList != null)
                        {
                            foreach (DataRow row in dtAddList.Rows)
                            {
                                row.SetField<string>("order_code", orderCode);
                            }
                        }                    ids = DataAcc.InsertData(dsAdd);
                    }
                    if (ids != null && ids.Length > 0 && ids[0].ListID.Length > 0)
                    {
                        this.AffectedCode = ids[0].ListID[0];
                        return ids[0].ListID[0];
                    }
                    return -1;
                }
                catch (System.ServiceModel.FaultException<string> ex)
                {
                    string addtional = "方法" + ex.Reason.ToString() + ";" + ex.Detail;
                    throw FaultNotificationException.GetFaultNotificationException("新增委托单时出错",
                        "WangDa.ExBusiness.Consignor.Order.Add方法",
                        addtional, null);
                }
                catch (Exception ex)
                {
                    throw FaultNotificationException.GetFaultNotificationException(ex.Message,
                        "WangDa.ExBusiness.Consignor.Order.Add方法",
                        "", ex);
                }
                finally
                {
                    if (dtAdd != null) dtAdd.Dispose();
                    if (dtAddList != null) dtAddList.Dispose();
                }