C# checked 和 unchecked

2025 年 9 月 5 日 | 阅读 5 分钟

在 C# 编程语言中,checked 和 unchecked 是用于处理整数类型异常的关键字。Checked 和 unchecked 关键字分别指定了检查上下文和未检查上下文。checked 关键字用于强制运行时检查算术溢出。另一方面,unchecked 关键字告诉编译器忽略溢出。

C# checked 关键字

C# 编程中,checked 关键字用于显式启用整数类型算术运算和转换的溢出检查。如果在 checked 操作期间发生溢出,运行时将抛出 OverflowException。

语法

它具有以下语法。

在这个语法中,

  • checked:这是一个关键字,用于允许块内的算术运算进行溢出检查。

不使用 checked 关键字的 C# checked 示例

让我们举一个不使用 C# 中 checked 关键字的例子。

示例

编译并运行

输出

-2147483647

说明

此示例会生成错误结果,并且不会抛出任何溢出异常。

使用 checked 关键字的 C# checked 示例

让我们举一个简单的例子来说明 C# 中的 checked 关键字。

示例

编译并运行

输出

Overflow detected: Arithmetic operation resulted in an overflow.

说明

在此示例中,我们演示了如何使用 checked 块检测整数溢出。首先,我们将变量 x 初始化为 int.MaxValue,这是最大值。在 checked 块内部,程序尝试将 1 添加到 x。由于此操作超出了整数值的范围,因此会导致溢出。之后,checked 块强制运行时抛出 OverflowException。

C# unchecked 关键字

在 C# 编程中,unchecked 关键字主要用于忽略整数类型算术运算和转换的溢出检查上下文。如果发生溢出,它不会抛出异常;相反,结果会根据二进制补码算术进行环绕。

语法

它具有以下语法。

在这个语法中,

  • unchecked:它用于禁用块内算术运算的溢出检查。

C# unchecked 关键字示例

让我们举一个例子来说明 C# 中的 unchecked 关键字。

示例

编译并运行

输出

The Result is: -2147483648

说明

在此示例中,我们取了一个变量 'y',其值为 int.MaxValue,这是 int 可以容纳的最大值。在 unchecked 块中,当我们对此值加 1 时,会发生溢出。但是,由于它在 unchecked 块中,溢出不会抛出异常。相反,结果会环绕到最小的 int 值。

C# 中的嵌套 checked 和 unchecked

在 C# 中,嵌套的 checked 和 unchecked 块允许将一个放置在另一个内部,以控制溢出行为。外部块设置默认的溢出行为,内部块可以临时覆盖该行为。

语法

它具有以下语法。

在这个语法中,

  • checked 块:它为块内的所有算术运算启用溢出检查。
  • unchecked 块:它忽略块内所有算术运算的溢出检查。

嵌套 checked 和 unchecked 的简单示例

让我们举一个例子来说明 C# 中的嵌套 checked 和 unchecked 关键字。

示例

编译并运行

输出

Inside checked block:
Caught overflow: Arithmetic operation resulted in an overflow.

说明

在此示例中,我们演示了 C# 中嵌套 checked 和 unchecked 关键字的使用。在 checked 块内部,程序尝试将 1 添加到 int.MaxValue,这会导致溢出,并抛出 OverflowException。unchecked 块被跳过,因为错误首先发生。

checked 和 unchecked 关键字之间的区别

C# 中的 checked 和 unchecked 关键字之间存在几个主要区别。其中一些如下:

特点Checked (选中)Checked
溢出检查如果数字变得过大或过小,它会抛出溢出错误。它忽略溢出并环绕值。
用途当我们想捕获大数字的错误时使用它。当我们期望值在变得过大后环绕时使用它。
调试模式下的默认设置默认启用它,以帮助在开发过程中发现错误。默认禁用它。
发布模式下的默认设置默认禁用它默认启用它。

结论

总之,C# checked 和 unchecked 是强大的关键字,用于控制程序运行时如何处理算术溢出。它们是 C# 的重要功能,可帮助开发人员管理溢出行为。

C# checked 和 unchecked 常见问题

1) 定义 C# 中的 checked 关键字?

在 C# 编程语言中,checked 关键字用于显式启用整数类型算术运算和转换的溢出检查。如果在 checked 操作期间发生溢出,运行时将抛出 OverflowException。

2) 定义 C# 中的 unchecked 关键字?

在 C# 编程中,unchecked 关键字主要用于忽略整数类型算术运算和转换的溢出检查上下文。

3) 如果 C# 的 checked 块中发生溢出,会发生什么?

如果在 checked 块内发生溢出,运行时将抛出 OverflowException。

4) 什么时候应该在 C# 中使用 checked 关键字?

在 C# 中,checked 关键字用于启用块内算术运算的溢出检查,有助于在运行时检测和处理溢出错误。

5) 什么时候应该在 C# 中使用 unchecked 关键字?

在 C# 中,unchecked 用于禁用块内算术运算的溢出检查,这允许值在不抛出异常的情况下静默环绕。


下一个主题C# SystemException