C# 插入代码的最佳位置

C# 插入代码的最佳位置,c#,exception-handling,throw,C#,Exception Handling,Throw,我正在基于web上的几个来源编写一些异常处理最佳实践。从Microsoft网页上,我得到了以下建议: 堆栈跟踪从抛出异常的语句开始,到捕获异常的catch语句结束。在决定放置throw语句的位置时,请注意这一事实 我不是舒尔,这意味着什么。我们能说“投掷”的最佳地点是尽可能靠近有问题的呼叫吗?这是正确的还是有人有其他建议 编辑:我会更精确。请参见下面的伪代码 // do something that assignes a value to 'someValue' // do m

我正在基于web上的几个来源编写一些异常处理最佳实践。从Microsoft网页上,我得到了以下建议:

堆栈跟踪从抛出异常的语句开始,到捕获异常的catch语句结束。在决定放置throw语句的位置时,请注意这一事实

我不是舒尔,这意味着什么。我们能说“投掷”的最佳地点是尽可能靠近有问题的呼叫吗?这是正确的还是有人有其他建议

编辑:我会更精确。请参见下面的伪代码

    // do something that assignes a value to 'someValue'

    // do more that's not related to the call above

    if (someValue == whatever)
    {
        throw new MyException();
    }
我假设当我在相关调用dosomething之后执行其他操作并抛出异常时,我将无法获得指向正确行的正确堆栈跟踪。我说得对吗

堆栈跟踪从抛出异常的语句开始,到捕获异常的catch语句结束。在决定放置throw语句的位置时,请注意这一事实

如果以下代码未包装在try-catch块中,调试器将为您提供一个堆栈跟踪,其中最顶端的项指向dividetworumbers函数,因为它是发生异常的地方。该行后面的所有其他代码:双商=除数10,0;将不会执行,这意味着所有其他抛出语句都将无效。假设您期望在另一个函数中出现异常,那么您是捕获该异常还是将另一个函数包含在堆栈跟踪中?答案是否定的

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;
    }

很抱歉听起来很粗鲁,但如果你不明白这意味着什么,你可能不是定义最佳实践的最佳人选。在不适用进一步工作的地方抛出一个例外,这通常是发生错误的地方。最佳地点?当然是在try块内部,或者在try块内部执行的任何方法。我的意思是,你还想把它放在哪里?@DavidArno:这没那么粗鲁,只是诚实;-。这就是为什么我把这个问题放在这里,让它成为一个最佳实践,而不仅仅是从网上复制一些建议。我想说得更准确一些。请参阅下面的伪代码://do something为'someValue'赋值//如果someValue==which{throw new MyException;},则执行与上述调用无关的更多操作