整数溢出 - 将C#转换为VB.Net代码

时间:2012-10-03 17:18:09

标签: c# vb.net int overflow

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

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

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

知道怎么解决吗?

3 个答案:

答案 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。

祝你好运。