2017-04-03 105 views
0

从MSDN:为什么VB.NET默认会抛出OverflowException?

对于算术,铸造,或转换操作抛出OverflowException异常,必须发生在checked上下文的操作。默认情况下,检查Visual Basic中的算术运算和溢出;在C#中,他们不是。如果操作发生在未经检查的上下文中,则通过丢弃不符合目标类型的任何高位来截断结果。

据我所知,默认情况下,C#和F#不检查算术上溢/下溢,因为性能。但为什么VB.NET将它们检查为默认值?

+7

“因为语言设计者认为这应该是默认的” - 这几乎是它的开始和结束;他们只是在意想不到的结果与性能的竞争利益之间作出不同的决定/妥协 –

+1

它是一个来自“Default Template”的设置...如果您想要(高级构建设置),可以对其进行修改,但是重点是什么。如果你不想让它取消它... – Codexer

+2

可能重复[OverflowException只在VB.net,而不是在C#](http://stackoverflow.com/questions/36311162/overflowexception-only-in-vb- net-not-in-c-sharp) – Neolisk

回答

1

老实说,人们应该勤于设计,所以不会发生意外溢出,就像一些低级语言所要求的那样。也许在C#中,他们相信,如果你正在淹没,你就会故意喜欢哈希码的生成,例如,如果你自己不信任你,那么这个语言有检查过的工具。另外,如果记住嵌套在一个checked中是太麻烦的,你可以改变一个编译器设置,使它始终处于活动状态,模拟VB环境。

相关问题