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

C#-什么会导致这里的溢出检查?,c#,checked,unchecked,overflowexception,C#,Checked,Unchecked,Overflowexception,我习惯于C#不执行溢出检查,正如语言规范所述(§7.5.12): 对于未包含任何已检查或未检查的运算符或语句的非常量表达式(在运行时计算的表达式),默认溢出检查上下文未检查,除非外部因素(如编译器开关和执行环境配置)调用已检查的计算 在低级代码中执行数组边界检查时,我利用了这一点: if ((uint)index >= (uint)TotalCount) ... 若索引是负数,我希望它变成一个大的正数,这样它就超过了TotalCount。然而,令我惊讶的是,负数产生Overflo

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

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

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

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

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

它应该在项目中

  • 双击“属性”文件夹
  • “生成”选项卡
  • 单击高级。。。按钮
  • 取消选中“检查算术溢出/下溢”
    它应该在项目中

  • 双击“属性”文件夹
  • “生成”选项卡
  • 单击高级。。。按钮
  • 取消选中“检查算术溢出/下溢”
    谢谢,我以前从来没有注意到那个高级按钮!谢谢,我以前从来没有注意到那个高级按钮!