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

时间:2015-04-28 13:49:03

标签: c# exception c#-4.0 try-catch

我有两种方法: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
    }
    ...
}

我认为我的解决方案不好而且不漂亮。

我的问题:如果我在第一种方法中遇到异常,如何执行所有方法?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

你有两种选择;要么在单独的method1块中将调用分开到method2try-catch,要么将try-catch移到两个方法的内部。

哪个选项最好取决于方法的作用以及调用它们的位置。如果您只想在此methodMain - 方法中处理/吞下异常,那么这是正确的解决方案。但是,如果您想忽略各处的异常,那么我建议您将try-catch块移到两个方法的内部。