2016-07-10 10 views
0

Ich setze die Elemente eines Arrays auf Nothing, wenn die gleichen Elemente in einem anderen Array Nothing ist. (Aus verschiedenen Gründen kann ich das Array nicht klonen). Beide Arrays sind Objekttyp. Wenn Elemente im ersten Array Objx (i, j) jedoch gleich 0 sind, wird die logische Anweisung als Nothing ausgewertet und das Element des zweiten Arrays als Nothing festgelegt. Warum wird ein Nullelement in einem Array des Objekttyps zu Nothing ausgewertet?Null Element in einem Array von Objekttyp Auswertung auf nichts

For i = 1 To NumRecords 
    For j = 1 To NumFields 
    If objx(i, j) = Nothing Then x(i, j) = Nothing 
    Next 
Next 

Außerdem gibt es eine Notwendigkeit, einen fehlenden Datum Code zu verwenden, zu testen, ob ein Element des Arrays fehlen und deshalb auf nichts werden würde, wenn sie fehlt wahr ist.

Dim MissingDataCode As Object = Nothing 
For i = 1 To NumRecords 
    For j = 1 To NumFields 
     If objx(i, j) Is MissingDataCode Then x(i, j) = Nothing 
     'If objx(i, j) = MissingDataCode Then x(i, j) = Nothing (does not work) 
    Next 
Next 

Nun, wenn ein Benutzer des fehlenden Datencode muss -9999, eingestellt wird und deshalb setzt:

MissingDataCode = -9999 

wird die folgende Lage sein, Werte von -9999 zu fangen und die zweiten Satz Array zu nichts?

If objx(i, j) = MissingDataCode Then x(i, j) = Nothing 

oder sollte die Codezeile

If objx(i, j) Is MissingDataCode Then x(i, j) = Nothing 
+0

Was sind die Array-Typen? Die Kerntypen wie Integer verwenden Nothing als Standardwert (0). Zum Beispiel wird Dim arryx (1, 1) As Int32 ein Array mit allen Elementen 0 (Standard) erstellen. – Plutonix

+2

Schalten Sie Option Strict ein und ändern Sie den Vergleich zu If objx (i, j) Ist nichts Dann x (i, j) = Nichts – dbasnett

+0

Sie sind beide Objekt-Arrays. – wrtsvkrfm

Antwort

0

Lösung sein: Wenn eine Variable vom Typ Object verwendet wird, um Werte eines fehlenden Datencode zu fangen, dann zwei if-Anweisungen verwendet werden müssen:

Dies verhindert, dass eine Null im Array objx (i, j) auf Null gesetzt wird. Wenn jedoch MissDataCode = 0, dann jederzeit objx (i, j) = 0 ist, wird das Ergebnis als fehlend ausgewertet und das zweite Array-Element x (i, j) auf Nothing gesetzt.

Die beiden oben genannten Linien wird für alle Fälle, beispiels arbeiten .:

Dim MissDataCode As Object = Nothing 
Dim MissDataCode As Object = -9999 
Dim MissDataCode As Object = "NA" 
Dim MissDataCode As Object = 0 
Dim MissDataCode As Object = "" 

Hinweis wird es Gelegenheiten geben, wenn ein Eingangs Null bedeutet, dass Daten fehlen.

1

Verwenden Sie niemals = Nothing zum Vergleich, und verwenden Sie stattdessen Is Nothing. Hier sind einige Beispiele:

Dim o As Object 
Console.WriteLine(o = Nothing) ' True 
Console.WriteLine(o Is Nothing) ' True 

o = 0 
Console.WriteLine(o = Nothing) ' True 
Console.WriteLine(o Is Nothing) ' False 

o = "" 
Console.WriteLine(o = Nothing) ' True 
Console.WriteLine(o Is Nothing) ' False 

bearbeiten Mein schlecht .. Ich habe nicht den zweiten Teil bemerken, die auf die Frage gegeben. Vielleicht finden Sie auch diese interessante What is the difference between And and AndAlso in VB.NET?

+0

Wenn Option Strict On aktiviert ist; die Verwendung von '= Nothing' mit einer' Object'-Variablen ist verboten; Aber es gibt kein Problem mit '= Nothing' für einen gegebenen Typ, wenn wir verstehen, was das wirklich bedeutet. – Sehnsucht

+0

Dies ist jedoch wahr, die Frage beinhaltet die Verwendung eines' MissDataCode', der, wenn true, ein anderes Array auf Nothing setzt. In der unten angegebenen LÖSUNG, wenn 'objx (i, j) = - 9998', dann ist der Wert gültig und ist keine fehlende Zahl. Wenn der Benutzer jedoch -9999 in die Daten platziert hat, um "Missing" darzustellen, wird "objx (i, j) = -9999" und die Verwendung von "MissDataCode = -9999" als wahr ausgewertet. In dem obigen Code gibt es keine Möglichkeit zu bestimmen, dass -9998 kein fehlender Wert ist. – wrtsvkrfm