内部尝试/捕获(第二次尝试/捕获在一个方法内)

Sil*_*ght 2 c# exception-handling 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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想catch在第二次catch执行后强制第一次执行!如何强制执行上述操作并显示第二个catch错误?我想看到ex.ToString()两个catch块都一样.

提前致谢.

Cᴏʀ*_*ᴏʀʏ 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
    }
}
Run Code Online (Sandbox Code Playgroud)

有关如何正确重新抛出异常的详细信息,请参阅此帖子.

更新:捕获mymethod异常并向Click处理程序提供这些详细信息的另一种但略微不太优选的方法是将新异常传递包含在新的异常中:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,我链接的帖子有更多细节.