unchecked (C# 參考)

unchecked 關鍵字是用來隱藏整數類資料型別 (Integral Type) 之算術運算和轉換的溢位檢查。

在不檢查 (Unchecked) 的內容中,如果運算式產生在目的型別範圍之外的值,不會以旗標標示溢位。 例如,因為下列範例中的計算會以 unchecked 區塊或運算式執行,所以,會忽略該結果對於整數而言太大的結果,同時,int1 會指派為值 -2,147,483,639。

unchecked
{
    int1 = 2147483647 + 10;
}
int1 = unchecked(ConstantMax + 10);

如果移除環境 unchecked,則會發生編譯錯誤。 在編譯期間,因為運算式的所有條件都是固定的,所以可以偵測溢位。

根據預設,在編譯期間與執行階段,不會檢查包含非常數條件的運算式。 如需啟用檢查 (Checked) 環境的詳細資訊,請參閱 checked (C# 參考)

因為檢查溢位耗費時間,所以在沒有溢位危險的情況中使用不檢查的程式碼,可以提升效能。 不過,如果仍有溢位的可能性,則必須使用檢查環境。

範例

這個範例顯示如何使用 unchecked 關鍵字。

class UncheckedDemo
{
    static void Main(string[] args)
    {
        // int.MaxValue is 2,147,483,647.
        const int ConstantMax = int.MaxValue;
        int int1;
        int int2;
        int variableMax = 2147483647;

        // The following statements are checked by default at compile time. They do not
        // compile.
        //int1 = 2147483647 + 10;
        //int1 = ConstantMax + 10;

        // To enable the assignments to int1 to compile and run, place them inside 
        // an unchecked block or expression. The following statements compile and
        // run.
        unchecked
        {
            int1 = 2147483647 + 10;
        }
        int1 = unchecked(ConstantMax + 10);

        // The sum of 2,147,483,647 and 10 is displayed as -2,147,483,639.
        Console.WriteLine(int1);


        // The following statement is unchecked by default at compile time and run 
        // time because the expression contains the variable variableMax. It causes  
        // overflow but the overflow is not detected. The statement compiles and runs.
        int2 = variableMax + 10;

        // Again, the sum of 2,147,483,647 and 10 is displayed as -2,147,483,639.
        Console.WriteLine(int2);

        // To catch the overflow in the assignment to int2 at run time, put the
        // declaration in a checked block or expression. The following
        // statements compile but raise an overflow exception at run time.
        checked
        {
            //int2 = variableMax + 10;
        }
        //int2 = checked(variableMax + 10);

        // Unchecked sections frequently are used to break out of a checked 
        // environment in order to improve performance in a portion of code 
        // that is not expected to raise overflow exceptions.
        checked
        { 
            // Code that might cause overflow should be executed in a checked
            // environment.
            unchecked
            { 
                // This section is appropriate for code that you are confident 
                // will not result in overflow, and for which performance is 
                // a priority.
            }
            // Additional checked code here. 
        }
    }
}

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格。 語言規格是 C# 語法和用法的決定性來源。

請參閱

參考

C# 關鍵字

Checked 與 Unchecked (C# 參考)

checked (C# 參考)

概念

C# 程式設計手冊

其他資源

C# 參考