vb.net - 检查空字节

标签 vb.net

我正在使用 Visual Basic .NET 来处理 USB HID 设备。

大多数时候,我可以完美地从它接收数据...但是大约每千次传输中就有一次,我的代码会认为它已经接收到数据,而实际上并没有。

设备写入一个字节数组。我想通过执行以下操作来检查接收到的数据包是否为空:

If myDevice.dataPacket(1) <> Nothing then
    myDevice.rxDataReady = False

不幸的是,即使这样我还是得到一个 NullReferenceException,说对象引用没有设置到对象的实例。

是否有不同的方法来执行此操作,或者我应该只处理 NullReferenceException?如果我每分钟执行此例程数百次,添加异常会减慢速度吗?

最佳答案

所以,有几件事。

  1. Byte 是一种值类型,因此永远不能为 null。在 VB.Net 中,当您使用等号 = 设置或检查 Nothing 时,您实际上是在设置或检查该值是否为“默认值”。对于数字类型,“默认值”为零,因此这两个语句是相同的:

    如果 MyByte = Nothing Then ...

    如果 MyByte = 0 那么....

  2. 由于上述规则,您在访问字节时绝不会收到 NullReferenceException (NRE),因为字节不能为空。然而,持有一个字节的东西可以为空。所以在你的情况下你应该检查:

    如果 myDevice.dataPacket IsNot Nothing Then

  3. 根据 dataPacket 中字节的设置方式,您可能还需要检查 dataPacket.Length 属性(在检查 dataPacket 不为空)以确保数组中有足够的索引。如果超出索引,您将得到一个 IndexOutOfRangeException

    如果 (myDevice.dataPacket IsNot Nothing) AndAlso (myDevice.dataPacket.Length >= 100) Then

关于vb.net - 检查空字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324338/

相关文章:

c# - 澄清 SQL 和 ADO.net 文字参数规范

vb.net - 如何将文本数据保存到二进制文件中以使其不可读

vb.net - 在 VS 2010 中的窗体之间传递变量

vb.net - 在 .NET 中调用 SmtpClient.Dispose() 是否安全?

.net - 如何使用vb.net在固定宽度和动态高度的纸张上打印

vb.net - .NET - 如何生成具有一定步长的范围内的随机数?

asp.net - 有没有更有效的方法来管理 IF 语句?

asp.net - GridView Dropdownlist CSS 首字母应为黑色,其余内容应为绿色

.net - 带有 .Net 的 Active Directory 服务器

vb.net 列出具有值的类属性