下面的代码在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(如果需要)中的默认设置相同。

09-10 02:06
查看更多