2016-02-12 22 views
1

我已经解决了这个问题,我发布了。区分原始System.Exception并抛出新的Exception/ApplicationException?

对于疯狂调用的方法,是否可以区分原始System.Exception(即throw ex;)和新的Exception(即throw new Exception("Specific error", ex);)还是新的ApplicationException

public void InsertNewCar() 
{ 
    try 
    { 
     Car myCar = new Car(); 
     myCar.Insert(); 
    } 
    catch (Exception ex) 
    { 
    if (/* This ex is the New Exception */ 
     alert(somethingMissingMsg); 
    } 
    else /* This is the original exception */ 
    { 
     alert(Something wrong generic error); 
    } 
} 

public void Insert() 
{ 
    try 
    { 
     SqlHelper.ExecuteNonQuery(ConnString, CommandType.Text, sqlInsert); 
    } 
    catch (SqlException ex) 
    { 
     if (ex.Number == 515) 
     { 
      throw new Exception("Missing something", ex); 
      //throw new ApplicationException("Missing something", ex); 
     } 
     else 
     { 
      throw ex; 
     } 
    } 
} 

谢谢。

+0

[订购catch块时,试图处理异常(可能的重复http://stackoverflow.com/questions/15609597/order-catch-blocks-when-try-to-handle-an-exception )@Stephen – Stephen

+0

,这不是重复的。订购catch块如何与此相关?我的问题与实际异常无关,但如何区分接收异常的方法中的异常。 – rbhat

+0

我刚才明白你的问题....阅读对方的回答评论后... – Stephen

回答

0

结束了使用此:

public void InsertNewCar() 
{ 
    try 
    { 
     Car myCar = new Car(); 
     myCar.Insert(); 
    } 
    catch (Exception ex) 
    { 
    if (ex is ApplicationException) 
     alert("Something missing Msg"); 
    else /* This is the original exception */ 
     alert("Something wrong generic error"); 
} 

public void Insert() 
{ 
    try 
    { 
     SqlHelper.ExecuteNonQuery(ConnString, CommandType.Text, sqlInsert); 
    } 
    catch (SqlException ex) 
    { 
     if (ex.Number == 515) 
     { 
      throw new ApplicationException("Missing something", ex); 
     } 
     else 
     { 
      throw ex; 
     } 
    } 
} 
+0

如果你想重新抛出异常,则可能需要使用'throw',而不是'抛ex',并赶上你的您的例外与多个特定catch块:只使用'赶上(异常前)'的情况下,你不预期 – Stephen

1

可以指定你想赶上(介意排序)什么样的异常。异常的InnerException属性可能包含导致当前异常的其他信息。

try 
{ 
    MethodThatBlowsUp(); 
} 
catch (ApplicationException appex) 
{ 
    //handle 
} 
catch (Exception ex) 
{ 
    //handle 
} 
+0

谢谢,但我的问题是不相关的实际例外,但如何在方法例外区分是正在接收的例外。 – rbhat

相关问题