checked 關鍵字用於對整數算術運算和轉換明確啟用溢位檢查。
預設情況下,如果表達式僅包含常數值,且產生的值在目標類型範圍之外,則它會導致編譯器錯誤。 如果表達式包含一個或多個非常數值,則編譯器不偵測溢位。 在下面的範例中,計算賦給 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# checked與unchecked用法的內容,更多相關內容請關注PHP中文網(www.php.cn)!