VB.NET 中“(字节)”的等价物是啥?

Posted

技术标签:

【中文标题】VB.NET 中“(字节)”的等价物是啥?【英文标题】:What is the equivalent of "(byte)" in VB.NET?VB.NET 中“(字节)”的等价物是什么? 【发布时间】:2012-08-30 08:05:45 【问题描述】:

VB.NET中(byte)的等价物是什么:

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# 相同的结果?

【问题讨论】:

一个字节可能存储255(无符号),C#默默地转换值,而VB好像没有。 【参考方案1】:

要获取最重要的字节,您可以做一些相当hackalicious

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

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

【讨论】:

【参考方案2】:

默认情况下,C# 不检查整数溢出,但 VB.NET 会。

如果你在 C# 中遇到相同的异常,例如将您的代码包装在 checked 块中:

checked

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


在您的 VB.NET 项目属性中,启用 配置属性 => 优化 => 删除整数溢出检查,然后您的 VB.NET代码将与您的 C# 代码完全一样。

然后对整个项目禁用整数溢出检查,但这通常不是问题。

【讨论】:

提议更改设置以禁用 all 溢出检查只是为了使一个语句有效。 禁用所有溢出检查根本不是问题(事实上,我从未遇到过这种情况)。如果你覆盖GetHashCode(),你可能还是想禁用它。 @BigYellowCactus 你不知道溢出检查是否依赖于项目的其他地方。在没有现有代码的项目开始时更改此设置会很好,但在大型开发项目中,如果您这样做,则需要重新测试所有内容。【参考方案3】:

尝试首先从数字中删除最重要的字节,然后将其转换为字节:

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

【讨论】:

以上是关于VB.NET 中“(字节)”的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 C# 的 VB.NET 等价物?操作员? [复制]

什么是 C# 快捷方式测试的 VB .Net 等价物,用于判断事物的真假? [复制]

VB6 与 .NET Short 的等价物是啥?

在 C# 中使用块等价物?

如何编写 VB.Net Lambda 表达式

Oracle 中 varchar(max) 的等价物是啥?