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用法的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!