簡體   English   中英

在哪里最好放置代碼

[英]Where to best place a throw in code

我正在根據網絡中的幾個來源編寫一些異常處理最佳實踐。 從 Microsoft 網頁( https://msdn.microsoft.com/en-us/library/seyhszts(v=vs.110).aspx )我得到了建議:

“堆棧跟蹤開始於拋出異常的語句,結束於捕獲異常的 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();
    }

我假設當我在有問題的調用之后做其他事情(做某事)之后拋出異常時,我不會得到正確的堆棧跟蹤,將我指向正確的行。 我對嗎?

“堆棧跟蹤開始於拋出異常的語句,結束於捕獲異常的 catch 語句。在決定放置 throw 語句的位置時請注意這一事實。”

如果以下代碼未包含在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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM