2014-03-12 85 views
-4

我有一個包含幾種方法的類。從其他方法捕捉異常

其中一種方法在while循環(MainMethod)中運行。

我從MainMethod的同一個類中調用幫助器方法。

Try Catch包含在執行大部分執行的MainMethod中。

如果在不包含Try Catch的幫助器方法中發生異常,它會被進一步捕獲嗎?即在調用輔助方法的MainMethod中。

 class Class1 
    { 
     public MainMethod() 
     { 
      while (true) 
      { 
       try 
       { 
        // ... 
        // ... 
        // ... 
        HelperMethod(); 
        // ... 
        // ... 
       } 
       catch (Exception e) 
       { 
        // Console.WriteLine(e.ToString()); 
        // logger.log(e.ToString(); 
        // throw e; 
        // ... 
       } 

      } 
     } 

     public HelperMethod() 
     { 
      // No Try Catch 
      // if (today == "tuesday") program explodes. 
     } 
    } 

謝謝。

+3

你爲什麼不從'HelperMethod'拋出一個異常並且看看自己? –

+0

謝謝downvote – mitchellt

+0

我在這裏問的原因是因爲我知道它會很快回答。它也是任何想知道同樣事情的人的資源。 – mitchellt

回答

2

是的。如果一個方法沒有try/catch塊,它會「冒泡」堆棧並被鏈上的下一個處理器捕獲。如果沒有處理程序,那麼當程序終止時,因爲異常是「未處理」的。

+0

謝謝,那就是我正在尋找的。 – mitchellt

1

是的。例如:

public class Helper 
{ 
    public void SomeMethod() 
    { 

     throw new InvalidCastException("I don't like this cast."); 
    } 

    public void SomeOtherMethod() 
    { 
     throw new ArgumentException("Your argument is invalid."); 
    } 
} 

public class Caller 
{ 
    public void CallHelper() 
    { 
     try 
     { 
      new Helper().SomeMethod(); 

     } 
     catch (ArgumentException exception) 
     { 
      // Do something there 
     } 
     catch (Exception exception) 
     { 
      // Do something here 
     } 

     try 
     { 
      new Helper().SomeOtherMethod(); 
     } 
     catch (ArgumentException exception) 
     { 
      // Do something there 
     } 
     catch (Exception exception) 
     { 
      // Do something here 
     } 
    } 
} 

請注意,如果調用者應用程序處理該特定類型的異常,將調用特定的catch塊。

恕我直言,這是很好的處理可能會從您的代碼調用的方法拋出的特定異常。但是,這也意味着您所調用方法的作者創建了一個體面的文檔,共享我們需要從他的代碼中期望的異常。

+0

謝謝你。 – mitchellt