在哪里最好地放置插入代码
本文关键字:插入 代码 在哪里 | 更新日期: 2023-09-27 18:00:44
我正在基于web中的几个来源编写一些异常处理最佳实践。从Microsoft网页(https://msdn.microsoft.com/en-us/library/seyhszts(v=vs.110).aspx)我得到了推荐:
"堆栈跟踪从抛出异常的语句开始,到捕获异常的catch语句结束。在决定将抛出语句放在哪里时,请注意这一事实。"
我真的不明白这意味着什么。我们能说"投掷"的最佳位置尽可能靠近有问题的判罚吗?这是正确的吗?或者有人有其他建议吗?
编辑:我会更精确。请参阅下方的以下伪代码
// do something that assignes a value to 'someValue'
// do more that's not related to the call above
if (someValue == whatever)
{
throw new MyException();
}
我假设,当我在所讨论的调用(做某事)之后做了其他事情后抛出异常时,我将不会得到正确的堆栈跟踪,将我指向正确的行。我说得对吗?
"堆栈跟踪从抛出异常的语句开始,到捕获异常的catch语句结束。在决定将抛出语句放在哪里时,请注意这一事实。"
如果以下代码没有封装在try-catch
块中,调试器将为您提供堆栈跟踪,其中最上面的项指向DivideTwoNumbers()
函数,因为它是异常发生的地方。这一行之后的所有其他代码:double quotient = DivideTwoNumbers(10, 0);
将不会执行,这意味着您拥有的所有其他throw语句都将毫无用处。假设您在AnotherFunction()
中预期一个异常,您是否能够捕获该异常,或者AnotherFunction()
是否会包含在堆栈跟踪中?答案是否定的。
static void Main(string[] args)
{
try
{
double quotient = DivideTwoNumbers(10, 0);
AnotherFunction();
}
catch (DivideByZeroException ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
static int DivideTwoNumbers(int dividend, int divisor)
{
if (divisor == 0)
throw new DivideByZeroException();
return dividend / divisor;
}