如果我在第一个方法中出现异常,如何执行所有方法?

How can I execute all methods if I get exception in the first method?

我有两种方法:method1()method2()。 每个方法都可以创建异常 (WebException)。 我在这个方法中有 methodMain() 我执行的第一个方法是 method1(),我执行的是 method2()。 例如:

public void methodMain()
{
    ...
    try
    {
        method1();
        method2();
    }
    catch (WebException e)
    {
        //do something
    }
    ...
}

如果我从 method1() 得到异常,method2() 不会执行。

如果我在第一个方法中出现异常,如何执行所有方法?

我想到了解决方案:

public void methodMain()
{
    ...
    try
    {
        method1();
    }
    catch (WebException e)
    {
        //do something
    }
    ...
    try
    {
        method2();
    }
    catch (WebException e)
    {
        //do something
    }
    ...
}

我觉得我的方案不好也不漂亮

又是我的问题:如果我在第一个方法中出现异常,我该如何执行所有方法?

将这些方法包装在委托中并执行。您可以将任意数量的方法添加到 actions 数组并循环执行。

public void methodMain()
{
    Action[] actions = new Action[]
    {
       method1,
       method2
    };

    foreach(var method in actions)
    {
        try
        {
            method();
        }
        catch (WebException e)
        {
            //do something
        }
    }
}

你有两个选择;您可以在单独的 try-catch 块中将对 method1method2 的调用分开,或者将 try-catch 移动到两个方法的内部。

哪个选项最好取决于方法的作用和调用位置。如果您只想在此 methodMain 方法中出现 handle/swallow 异常,那么这是正确的解决方案。但是,如果您想忽略所有地方的异常,那么我建议您将 try-catch 块移动到两种方法的内部。