Null-Bytes
Ich bin mit Visual Basic .NETTO für arbeiten mit einer USB-HID-Gerät.
Meisten der Zeit, ich kann Daten empfangen, die es perfekt... aber einer von tausend transfers oder so, mein code denke, dass es Daten empfangen hat, wenn es eigentlich noch nicht.
Das Gerät schreibt ein array von bytes. Ich wollte überprüfen, um zu sehen, ob das empfangene Paket leer ist, von etwas wie dies:
If myDevice.dataPacket(1) <> Nothing then
myDevice.rxDataReady = False
Leider auch mit diesem bekomme ich eine NullReferenceException, die sagen, dass der Objektverweis nicht auf eine Instanz eines Objekts.
Gibt es einen anderen Weg, dies zu tun, oder soll ich nur damit umgehen eine NullReferenceException? Wenn ich diese ausführen routine Hunderte Male pro minute, wird das hinzufügen der Ausnahme, die Dinge verlangsamen überhaupt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ein paar Dinge.
Einen
Byte
ist ein Wert-Typ und kann daher nienull
. In VB.Net wenn Sie oder überprüfen Sie, obNothing
die Verwendung der Gleichheits-Zeichen=
Sie tatsächlich einstellen oder prüfen, ob der Wert hält "den default-Wert". Für numerische Typen, die der "default Wert" null ist, also diese beiden Aussagen sind die gleichen:If MyByte = Nothing Then ...
If MyByte = 0 Then ....
Aufgrund der oben genannten Regel, die Sie sollten nie erhalten ein
NullReferenceException
(NRE) beim Zugriff auf ein byte, da ein byte nicht null sein. Allerdings ist die Sache holding ein byte kann null sein. Also in Ihrem Fall sollten Sie prüfen:If myDevice.dataPacket IsNot Nothing Then
Je nachdem, wie die bytes innerhalb
dataPacket
eingestellt sind, könnten Sie auch prüfen wollen, diedataPacket.Length
Eigenschaft (nach überprüfung, dassdataPacket
ist nicht null), um sicherzustellen, dass es genügend Indizes im array. Wenn Sie gehen, außerhalb der Indizes erhalten Sie eineIndexOutOfRangeException
.If (myDevice.dataPacket IsNot Nothing) AndAlso (myDevice.dataPacket.Length >= 100) Then
Ändern Sie die syntax dieser:
Sind Sie initialisieren (neu)?