C# checked與unchecked用法


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
*/
}


轉載自:http://www.cnblogs.com/limingluzhu/archive/2011/11/07/2239130.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM