下面的代码在c中运行良好。
Int32 a, b;
Int16 c;
a = 0x7FFFFFFF;
b = a & 0xFFFF;
c = (Int16)b;
但这段代码在VB.NET中由于overflowexception而崩溃。
Dim a, b As Int32
Dim c As Int16
a = &H7FFFFFFF
b = a And &HFFFF
c = CType(b, Int16)
这两个代码片段在我看来是一样的。有什么区别?我怎样才能把C代码转换成VB.NET?
最佳答案
From MSDN:
要使算术、转换或转换操作引发overflowexception,该操作必须发生在选中的上下文中。默认情况下,会选中Visual Basic中的算术运算和溢出;在C中,不会选中它们。如果操作发生在未检查的上下文中,则通过丢弃不适合目标类型的任何高阶位来截断结果。
编辑:
如果要将代码从c_移植到vb.net,您可能会对differences between them感兴趣。还可以比较并显式地将compiler settings设置为与c(如果需要)中的默认设置相同。