3

从 C# 到 VB.Net 的代码转换出现问题。

var x = 5783615;
var y = 56811584;
var t = x * y;

x、y 和 t 是整数。在 c# 中,'t' 将为 -15536​​49728。在 VB.Net 中,我会得到一个整数溢出异常。

知道如何解决吗?

4

3 回答 3

6

默认情况下,C# 不检查溢出,但 VB 会(默认情况下)。

您可以将 VB 项目设置为不在“编译”选项卡的“高级编译选项”中检查整数溢出。在这种情况下,这将导致该特定项目停止引发OverflowException

于 2012-10-03T17:22:18.860 回答
4

通过以 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
于 2012-10-03T18:28:11.740 回答
0

您需要显式类型定义来避免这种情况,因为定义将隐式地从值中获取。在 vb.net 中尝试:

dim x as int = 5783615
dim y as int = 56811584
dim t as int = x * y

可能还有其他方法可以做到这一点,但这应该是一个开始。在 C# 中,您也可以尝试使用 int 或 int32 或 int64。

祝你好运。

于 2012-10-03T17:24:58.137 回答