7

(byte)VB.NETに相当するものは何ですか?

C#:

uint value = 1161;
byte data = (byte)value;

データ=137

VB.NET:

  Dim value As UInteger = 1161
  Dim data1 As Byte = CType(value, Byte)
  Dim data2 As Byte = CByte(value)

例外:算術演算でオーバーフローが発生しました。

C#と同じ結果を得るにはどうすればよいですか?

4

3 に答える 3

11

デフォルトでは、C# は整数オーバーフローをチェックしませんが、VB.NET はチェックします。

checkedたとえば、コードをブロックでラップすると、C# で同じ例外が発生します。

checked
{
    uint value = 1161;
    byte data = (byte)value;
}

VB.NET プロジェクトのプロパティで、Configuration Properties => Optimizations => Remove Integer Overflow Checksを有効にすると、VB.NET コードは C# コードとまったく同じように機能します。

その後、プロジェクト全体で整数オーバーフロー チェックが無効になりますが、通常は問題ありません。

于 2012-09-05T14:56:55.763 に答える
6

最初に数値から最上位バイトを切り取ってから、バイトに変換してみてください。

Dim value As UInteger = 1161 
Dim data1 As Byte = CType(value And 255, Byte)
Dim data2 As Byte = CByte(value And 255)
于 2012-09-05T14:57:05.810 に答える
1

最も重要なバイトだけを取得するには、かなりハックすることができます

Dim data1 = BitConvertor.GetBytes(value)(0)

これは明示的であり、オーバーフロー チェックを無効にする必要はありません。

于 2012-09-05T15:24:36.237 に答える