【发布时间】:2013-05-17 12:50:48
【问题描述】:
我使用 ILSpy 反映到 LINQ's Sum 方法中,并注意到它只是使用 checked 关键字执行 foreach。但是,如果int 有一个已定义的最大值并且您尝试超过它,为什么默认情况下它不会抛出错误。假设您不使用Sum 并且您自己使用foreach 而没有checked,则不会出现异常,如果您超过最大int 值,它只会给您一个垃圾值,但我看不出这不仅仅是默认行为的原因。如果您需要比int 更大的东西,请不要使用int。
【问题讨论】:
-
您可以在项目设置中启用检查算法。我几乎所有项目都这样做。
-
@CodesInChaos - 好吧,我从来不知道这一点。感谢您指出这一点,但为什么仍然不是这种默认行为?从我自己的角度来看,如果我知道某个值将超过 int 的最大值,我会使用更大的值。
-
unchecked有用的一个地方是GetHashCode,int是否溢出并不重要。它只需要快速且相当准确。如果GetHashCode返回相同的值,Equals无论如何都用于确定两个对象是否真的相等。 stackoverflow.com/a/263416/284240 -
@CodesInChaos - 如果你在项目设置中这样做,它是否适用于整数、短裤等?您是否有正当理由要为 int 的算术溢出引发错误,而不是 short?