从C#到VB.Net的代码转换出了问题。
var x = 5783615;
var y = 56811584;
var t = x * y;
x,y和t是整数。在c#'t'将是-1553649728。 在VB.Net中,我将得到一个整数溢出异常。
知道怎么解决吗?
答案 0 :(得分:6)
默认情况下,C#不检查溢出,但VB确实(默认情况下)。
您可以将VB Project设置为不在“编译”选项卡的“高级编译选项”中检查整数溢出。这将导致该特定项目在此类情况下停止提升OverflowException。
答案 1 :(得分:2)
您可以通过以64位计算产品然后仅使用32位结果来获得与C#忽略溢出相同的值:
Dim x As Integer = 5783615
Dim y As Integer = 56811584
Dim tmp As Int64 = Convert.ToInt64(x) * Convert.ToInt64(y)
Dim bb = BitConverter.GetBytes(tmp)
Dim t = BitConverter.ToInt32(bb, 0)
' t is now -1553649728
答案 2 :(得分:0)
您需要显式类型定义来避免这种情况,因为定义将隐含地从值中获取。在vb.net中试试:
dim x as int = 5783615
dim y as int = 56811584
dim t as int = x * y
可能有其他方法可以做到这一点,但这应该是一个开始。在C#中,您也可以尝试使用int或int32或int64。
祝你好运。