共用方式為


checked (C# 參考)

checked 關鍵字是用來明確啟用整數類資料型別 (Integral Type) 算術運算和轉換的溢位檢查。

根據預設,當運算式只包含常數值時,如果該運算式所產生的值位於目的型別範圍之外,就會造成編譯器錯誤。 如果運算式包含一個或多個非常數值,編譯器就不會偵測到溢位。 在下列範例中,評估指派給 i2 的運算式並不會造成編譯器錯誤。

// The following example causes compiler error CS0220 because 2147483647
// is the maximum value for integers. 
//int i1 = 2147483647 + 10;

// The following example, which includes variable ten, does not cause
// a compiler error.
int ten = 10;
int i2 = 2147483647 + ten;

// By default, the overflow in the previous statement also does
// not cause a run-time exception. The following line displays 
// -2,147,483,639 as the sum of 2,147,483,647 and 10.
Console.WriteLine(i2);

根據預設,在執行階段不會檢查這些非常數運算式是否有溢位,而且也不會引發溢位例外狀況。 前述範例會顯示 -2,147,483,639 做為兩個正整數的加總。

您可以藉由編譯器選項、環境組態或使用 checked 關鍵字,啟用溢位檢查。 下列範例將示範如何使用 checked 運算式或 checked 區塊,偵測前述加總作業在執行階段產生的溢位。 這兩個範例都會引發溢位例外狀況。

// If the previous sum is attempted in a checked environment, an 
// OverflowException error is raised.

// Checked expression.
Console.WriteLine(checked(2147483647 + ten));

// Checked block.
checked
{
    int i3 = 2147483647 + ten;
    Console.WriteLine(i3);
}

unchecked 關鍵字可以用來防止溢位檢查。

範例

這個範例顯示如何使用 checked 在執行階段啟用溢位檢查。

class OverFlowTest
{
    // Set maxIntValue to the maximum value for integers.
    static int maxIntValue = 2147483647;

    // Using a checked expression.
    static int CheckedMethod()
    {
        int z = 0;
        try
        {
            // The following line raises an exception because it is checked.
            z = checked(maxIntValue + 10);
        }
        catch (System.OverflowException e)
        {
            // The following line displays information about the error.
            Console.WriteLine("CHECKED and CAUGHT:  " + e.ToString());
        }
        // The value of z is still 0.
        return z;
    }

    // Using an unchecked expression.
    static int UncheckedMethod()
    {
        int z = 0;
        try
        {
            // The following calculation is unchecked and will not 
            // raise an exception.
            z = maxIntValue + 10;
        }
        catch (System.OverflowException e)
        {
            // The following line will not be executed.
            Console.WriteLine("UNCHECKED and CAUGHT:  " + e.ToString());
        }
        // Because of the undetected overflow, the sum of 2147483647 + 10 is 
        // returned as -2147483639.
        return z;
    }

    static void Main()
    {
        Console.WriteLine("\nCHECKED output value is: {0}",
                          CheckedMethod());
        Console.WriteLine("UNCHECKED output value is: {0}",
                          UncheckedMethod());
    }
    /*
   Output:
   CHECKED and CAUGHT:  System.OverflowException: Arithmetic operation resulted
   in an overflow.
      at ConsoleApplication1.OverFlowTest.CheckedMethod() 

   CHECKED output value is: 0
   UNCHECKED output value is: -2147483639
 */
}

C# 語言規格

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

請參閱

參考

C# 關鍵字

Checked 與 Unchecked (C# 參考)

unchecked (C# 參考)

概念

C# 程式設計手冊

其他資源

C# 參考