【问题标题】: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好像没有。

标签: c# vb.net type-conversion


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多