C# - 什么会导致溢出检查?

标签 c# checked unchecked overflowexception

我习惯于 C# 不执行溢出检查,正如语言规范所述 (§7.5.12):

For non-constant expressions (expressions that are evaluated at run-time) that are not enclosed by any checked or unchecked operators or statements, the default overflow checking context is unchecked unless external factors (such as compiler switches and execution environment configuration) call for checked evaluation.

我在低级代码中进行数组边界检查时利用了这一点:

if ((uint)index >= (uint)TotalCount)
    ...

如果 index 为负数,我预计它会变成一个大的正数,从而超过 TotalCount。然而,令我惊讶的是,负数会产生 OverflowException,我必须将表达式包装在 unchecked() 中。我查看了 Visual Studio 中的项目选项,但没有看到启用或禁用溢出检查的选项。那么为什么它会出现在这里?

最佳答案

它应该在项目中。

  1. 双击“属性”文件夹。
  2. 构建选项卡。
  3. 单击“高级...”按钮。
  4. 取消选中“检查算术溢出/下溢”。

关于C# - 什么会导致溢出检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328610/

相关文章:

c# - 找不到类型或命名空间名称,C# 初学者

c# - 未经检查的 C# block 中的 System.OverflowException

javascript - 如果未选中一个子项,请取消选中父项复选框

c# - 如何在另一个 session 中更新具有惰性属性的对象(代理对象)?

c# - ASP.NET 使用身份验证 header 将 JSON 数据发布到 HTTP API

android - ListView,在 Android 1.6 上不检查可检查项目

javascript - 如何根据文本内容选择复选框?

javascript - 单选按钮切换选中的 php

java - 为什么 javac 提示与类的类型参数无关的泛型?

c# - 多个窗口导航相同的数据集合