程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C# checked與unchecked用法

C# checked與unchecked用法

編輯:C#基礎知識

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




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved