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

为了得到最重要的字节,你可以做相当hackalicious

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

它是明确的,您不需要禁用溢出检查。

于 2012-09-05T15:24:36.237 回答