checked 关键字用于对整型算术运算和转换显式启用溢出检查。
默认情况下,如果表达式产生的值超出了目标类型的范围,则常数表达式将导致编译时错误,而非常数表达式在运行时计算并将引发异常。不过,如果通过编译器选项或环境配置在全局范围内取消了溢出检查,则可以使用 checked 关键字来启用此项功能。
请参见有关 unchecked 关键字用法的 unchecked 示例。
示例 此示例演示如何对非常数表达式使用 checked。在运行时会报告溢出。
class OverFlowTest
{
static short x = 32767; // Max short value
static short y = 32767;
// Using a checked expression
static int CheckedMethod()
{
int z = 0;
try
{
z = checked((short)(x + y));
}
catch (System.OverflowException e)
{
Console.WriteLine(e.ToString());
}
return z;
}
static void Main()
{
Console.WriteLine("Checked output value is: {0}",
CheckedMethod());
}
}
/*
Output:
System.OverflowException: Arithmetic operation resulted in an overflow.
at OverFlowTest.CheckedMethod()
Checked output value is: 0
*/
unchecked 关键字用于取消整型算术运算和转换的溢出检查。
在未检查的上下文中,如果表达式产生目标类型范围之外的值,则结果被截断。例如:
复制代码
unchecked
{
int val = 2147483647 * 2;
}
因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。默认情况下,启用溢出检测,这与使用 checked 具有相同的效果。
在上面的示例中,如果省略 unchecked,将产生编译错误,因为表达式使用常数,结果在编译时是已知的。unchecked 关键字还取消对非常数表达式的溢出检测,这是为了避免在运行时导致 OverflowException。
unchecked 关键字还可以用作运算符,如下所示:
复制代码
public int UncheckedAdd(int a, int b)
{
return unchecked(a + b);
}
示例
此示例演示如何将 unchecked 语句与常量表达式配合使用。
C# 复制代码
class TestClass
{
const int x = 2147483647; // Max int
const int y = 2;
static void Main()
{
int z;
unchecked
{
z = x * y;
}
Console.WriteLine("Unchecked output value: {0}", z);
}
}
// Output: Unchecked output value: -2
浙公网安备 33010602011771号