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 に答える