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を試すこともできます。
幸運を。