2016-07-10 80 views
0

如果另一個數組中的相同元素爲Nothing,我將數組的元素設置爲Nothing。 (由於各種原因,我無法克隆數組)。這兩個數組都是對象類型。但是,當第一個數組Objx(i,j)中的元素等於0時,邏輯語句的計算結果爲Nothing,並將第二個數組的元素設置爲Nothing。爲什麼Object類型的數組中的零元素計算爲Nothing?對象類型數組中的零元素求值爲Nothing

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

此外,有必要使用丟失的數據代碼,以測試是否一個數組元素丟失,並因此將被設置爲Nothing如果丟失是真實的。現在

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 

,如果用戶需要的丟失數據代碼被設置爲-9999,因此設置:

MissingDataCode = -9999 

將以下能夠趕上的-9999值,並設置所述第二數組爲Nothing?

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

或應的代碼行是

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

什麼是數組類型?像integer這樣的核心類型使用Nothing作爲默認值(0)。例如,'Dim arryx(1,1)As Int32'將創建一個包含所有元素0(默認值)的數組。 – Plutonix

+2

將選項嚴格打開並將比較結果更改爲如果objx(i,j)爲Nothing Then x(i,j)= Nothing – dbasnett

+0

它們都是對象數組。 – wrtsvkrfm

回答

0

SOLUTION:如果採用Object類型的變量捕捉的缺失數據代碼的值,則兩個if語句需要使用:

Dim MissDataCode As Object = Nothing 

If objx(i, j) = MissDataCode And MissDataCode IsNot Nothing Then x(i, j) = Nothing 
If objx(i, j) Is MissDataCode And MissDataCode Is Nothing Then x(i, j) = Nothing 

這將防止objx(i,j)數組中的零被設置爲無。但是,如果MissDataCode = 0,則隨時objx(i,j)= 0,結果將評估爲丟失,並將第二個數組元素x(i,j)設置爲Nothing。

上述兩線將用於,例如:

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

注意任何情況下工作,會有場合,當輸入零意味着數據丟失。

1

從不使用= Nothing進行比較,而是使用Is Nothing代替。下面是幾個例子:

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 

編輯 我的壞..我沒有注意到,加入到這個問題的第二部分。 此外,你可能會發現這個有趣的What is the difference between And and AndAlso in VB.NET?

+0

如果您有Option Strict On;禁止使用'= Nothing'和'Object'變量;但是對於給定類型,''Nothing'沒有問題,只要我們理解它的真正含義 – Sehnsucht

+0

這是真的,但是,問題涉及到使用'MissDataCode',當true時將另一個數組設置爲Nothing。在下面提供的解決方案中,如果'objx(i,j)= - 9998',則該值有效並且不是缺失的數字。但是,如果用戶在數據中放置了-9999以表示缺少,那麼'objx(i,j)= -9999'和使用MissDataCode = -9999將評估爲true。在上面的代碼中,沒有辦法確定-9998不是缺少的值。 – wrtsvkrfm