从其他方法中捕获异常

时间:2014-03-12 16:49:02

标签: c# exception exception-handling

我有一个包含多种方法的类。

其中一个方法在while循环(MainMethod)中运行。

我从MainMethod调用同一个类中的辅助方法。

Try Catch包含在主要执行大部分的MainMethod中。

如果辅助方法中出现异常并且不包含Try Catch,是否会被进一步捕获?即在MainMethod中调用辅助方法。

     class Class1
     {
        public MainMethod() 
        {
            while (true) 
            {
                try 
                {
                    // ...
                    // ...
                    // ...
                    HelperMethod();
                    // ...
                    // ...
                }
                catch (Exception e) 
                {
                    // Console.WriteLine(e.ToString());
                    // logger.log(e.ToString();
                    // throw e;
                    // ...
                }

            }
        }

        public HelperMethod() 
        {
            // No Try Catch
            // if (today == "tuesday") program explodes.
        }
    }

感谢。

2 个答案:

答案 0 :(得分:2)

是。如果一个方法没有try / catch块,它将“冒泡”堆栈并被链上的下一个处理程序捕获。如果没有处理程序,那就是程序终止时,因为异常是“未处理”。

答案 1 :(得分:1)

是的,它会。像这样:

public class Helper
{
    public void SomeMethod()
    {

        throw new InvalidCastException("I don't like this cast.");
    }

    public void SomeOtherMethod()
    {
        throw new ArgumentException("Your argument is invalid.");
    }
}

public class Caller
{
    public void CallHelper()
    {
        try
        {
            new Helper().SomeMethod();

        }
        catch (ArgumentException exception)
        {
            // Do something there
        }
        catch (Exception exception)
        {
            // Do something here
        }

        try
        {
            new Helper().SomeOtherMethod();
        }
        catch (ArgumentException exception)
        {
            // Do something there
        }
        catch (Exception exception)
        {
            // Do something here
        }
    }
}

请注意,如果调用者应用程序处理该特定类型的异常,则将调用特定的catch块。

恕我直言,最好处理您从代码中调用的方法可能抛出的特定异常。但是,这也意味着您正在调用的方法的作者创建了一个体面的文档,共享我们需要从他的代码中获得的异常。