从 C# 到 VB.Net 的代码转换出现问题。
var x = 5783615;
var y = 56811584;
var t = x * y;
x、y 和 t 是整数。在 c# 中,'t' 将为 -1553649728。在 VB.Net 中,我会得到一个整数溢出异常。
知道如何解决吗?
默认情况下,C# 不检查溢出,但 VB 会(默认情况下)。
您可以将 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。
祝你好运。