一千萬個為什麽

搜索

在case語句中檢測到無法訪問的代碼

我有一個代碼:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Alt|Keys.D1:

                if (this._condition1)
                {
                    return true;
                }
                else
                {
                    return base.ProcessCmdKey(ref msg, keyData);
                }

                break;

            case Keys.Control |Keys.U:

                if (this._condition2)
                {
                    return true;
                }
                else
                {
                    return base.ProcessCmdKey(ref msg, keyData);
                }

                break;

            default:

                return base.ProcessCmdKey(ref msg, keyData);
        }

        return true;

它讓我在休息時“檢測到無法訪問的代碼”警告。

Is it good practice not to use break operator here ? I don't want to turn off "unreachable code detected" warning.

PS:我的ProcessCmdKey方法中有很多 case

最佳答案

你的代碼中有三個無法訪問的語句,前兩個是break語句,最後一個int是最後一行“return true”也是無法訪問的,我不知道C#編譯器是否檢測到了,但邏輯上沒有辦法最後返回聲明也將達成。

有多種方法可以解決這個問題,

  1. 存儲一個名為bool retVal的臨時變量,保持retVal並斷開你的開關盒,並在函數返回retVal的末尾。
  2. 如果你在休息前返回值,break語句就沒用了。

更好的設計方式

如果在switch case中返回值,可能很難在以後由您或其他人分析您的代碼,通常最好保留一個返回值temp變量並在函數結束時返回它,這樣就更容易調試和理解新編碼器的代碼。

交換機可能很復雜,並且交換機內的更多返回可能沒有更好的控制,如果要實現日誌記錄,調試,從案例返回可能會很復雜。它成為難以瀏覽邏輯流程圖的方法。

所以最好避免返回altogather,但仍然依賴於situtations,需要在這裏做出明智的決定。

轉載註明原文: 在case語句中檢測到無法訪問的代碼