我需要将C#代码转换为VB.Net,但遇到了问题。
var x = 5783615;
var y = 56811584;
var t = x * y;
x,y和t是整数。在C#中,'t'将为-1553649728。 在VB.Net中,我会收到整数溢出异常。
有什么解决办法吗?
C#默认情况下不检查溢出,但VB(Visual Basic)则会(默认情况下)。
您可以在编译选项的高级编译选项中设置VB项目以不检查整数溢出。这将导致该特定项目在类似于此类情况下停止引发OverflowException异常。
您可以通过在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
你需要显式类型定义来避免这种情况,因为定义将隐式地从值中获取。在vb.net中尝试:
dim x as int = 5783615
dim y as int = 56811584
dim t as int = x * y
可能有其他方法可以实现,但这应该是一个开始。在C#中,您还可以尝试int或int32或int64。
祝你好运。