C# 提供了checked 和unchecked 关键字来处理整型异常。Checked 和 unchecked 关键字分别指定已检查上下文和未检查上下文。在检查的上下文中,算术溢出引发异常,而在未经检查的上下文中,算术溢出被忽略并且结果被截断。
checked 关键字用于在编译时显式检查整数类型值的溢出和转换。
我们先来看一个不使用checked关键字的例子。
using System;
namespace CSharpProgram
{
class Program
{
static void Main(string[] args)
{
int val = int.MaxValue;
Console.WriteLine(val + 2);
}
}
}
输出:
-2147483647
看,上面的程序产生了错误的结果并且没有抛出任何溢出异常。
该程序抛出异常并停止程序执行。
using System;
namespace CSharpProgram
{
class Program
{
static void Main(string[] args)
{
checked
{
int val = int.MaxValue;
Console.WriteLine(val + 2);
}
}
}
}
输出:
Unhandled Exception: System.OverflowException: Arithmetic operation resulted in an overflow.
Unchecked 关键字忽略整数类型算术异常。它不会显式检查并产生可能被截断或错误的结果。
using System;
namespace CSharpProgram
{
class Program
{
static void Main(string[] args)
{
unchecked
{
int val = int.MaxValue;
Console.WriteLine(val + 2);
}
}
}
}
输出:
-2147483647