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

对于未包含在任何已检查或未检查运算符或语句中的非常量表达式(在运行时计算的表达式),默认的溢出检查上下文是未检查的,除非外部因素(例如编译器切换和执行环境配置)调用检查评价。

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

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

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

有帮助吗?

解决方案

应该是在项目里。

  1. 双击属性文件夹。
  2. 构建选项卡。
  3. 单击高级...按钮。
  4. 取消选中“检查算术上溢/下溢”。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top