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