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# 語法及用法的限定來源。