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

时间:2010-02-24 18:47:55

标签: c# checked unchecked overflowexception

我习惯于C#不执行溢出检查,因为语言规范声明(§7.5.12):

  

对于未由任何已检查或未检查的运算符或语句包含的非常量表达式(在运行时计算的表达式),除非外部因素(例如编译器开关和执行环境配置),否则将取消选中默认溢出检查上下文)要求进行检查评估。

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

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

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

1 个答案:

答案 0 :(得分:7)

它应该在项目中。

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