我有一个包含多种方法的类。
其中一个方法在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.
}
}
感谢。
答案 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块。
恕我直言,最好处理您从代码中调用的方法可能抛出的特定异常。但是,这也意味着您正在调用的方法的作者创建了一个体面的文档,共享我们需要从他的代码中获得的异常。