在哪里最好地放置插入代码

本文关键字:插入 代码 在哪里 | 更新日期: 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;
    }