2012-10-13 66 views
2

請參閱下面的代碼:裏面的try/catch(第二的try/catch裏面有個方法)

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      mymethod(); 
     } 
     catch (Exception ex)//First catch 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 

    private void mymethod() 
    { 
     int a = 10; 
     int b = 0; 
     try 
     { 
      int c = a/b; 
     } 
     catch (Exception ex)//Second catch 
     { 
      MessageBox.Show(ex.ToString()); 
      //int c = a/b; 
      throw new Exception(ex.ToString()); 
     } 
    } 
} 

我想迫使第一catch第二catch執行後執行!我如何強制上述運行並顯示第二個catch錯誤? 我希望看到兩個catch塊的ex.ToString()

在此先感謝。

回答

5

而是拋出一個新的異常,只是重新拋出現有一個:

private void mymethod() 
{ 
    int a = 10; 
    int b = 0; 
    try 
    { 
     int c = a/b; 
    } 
    catch (Exception ex)//Second catch 
    { 
     MessageBox.Show(ex.ToString()); 
     //int c = a/b; 
     throw; // change here 
    } 
} 

See this post關於如何正確重新拋出異常的細節。

更新:另一個,但略少首選的方法來捕捉mymethod異常,並提供這些細節,單擊處理程序將通過例外一起包裹在一個新問題:

private void mymethod() 
{ 
    int a = 10; 
    int b = 0; 
    try 
    { 
     int c = a/b; 
    } 
    catch (Exception ex)//Second catch 
    { 
     MessageBox.Show(ex.ToString()); 
     //int c = a/b; 
     throw new Exception("mymethod exception", ex); // change here 
    } 
} 

同樣,我鏈接的帖子有更多的細節。