2

以下のコードを参照してください。

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());
        }
    }
}

catch2番目の実行後に最初の実行を強制したいcatchcatch上記を強制的に実行して2番目のエラーを表示するにはどうすればよいですか?両方のブロックで同じものを見たいです。ex.ToString()catch

前もって感謝します。

4

1 に答える 1

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
    }
}

例外を適切に再スローする方法の詳細については、この投稿を参照してください。

更新:例外をキャプチャしてクリックハンドラにそれらの詳細を提供する別の、しかし少しあまり好ましくない方法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
    }
}

繰り返しになりますが、私がリンクした投稿には詳細があります。

于 2012-10-13T17:12:49.920 に答える