【问题标题】:C# - What could cause overflow checking here?C# - 什么可能导致溢出检查?
【发布时间】:2010-02-24 18:47:54
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# checked unchecked overflowexception


    【解决方案1】:

    它应该在项目中。

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

    【讨论】:

    • 谢谢,我以前从未注意到高级按钮!
    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 2010-09-11
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多