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

我想catch在第二个执行后强制第一个catch执行!如何强制上述运行并显示第二个catch错误?我想看到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 回答