如果另一个数组中的相同元素为Nothing,我将数组的元素设置为Nothing。 (由于各种原因,我无法克隆阵列)。两个数组都是Object类型。但是,当第一个数组Objx(i,j)中的元素等于0时,逻辑语句的计算结果为Nothing,并将第二个数组的元素设置为Nothing。为什么Object类型数组中的零元素评估为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 :(得分: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?
答案 1 :(得分:0)
解决方案:如果使用Object类型的变量来捕获缺失数据代码的值,则需要使用两个if语句:
MissDataCode = 0
这将防止objx(i,j)数组中的零被设置为空。但是,如果Dim MissDataCode As Object = Nothing
Dim MissDataCode As Object = -9999
Dim MissDataCode As Object = "NA"
Dim MissDataCode As Object = 0
Dim MissDataCode As Object = ""
,则任何时候objx(i,j)= 0,结果将评估为缺失并将第二个数组元素x(i,j)设置为Nothing。
上述两行适用于任何情况,例如:
Date;Something;
2014-03-31 15:00:01;xxx;
2015-02-01 13:20:01;xxx;
2014-03-03 17:00:03;xxx;
2014-03-03 17:00:04;xxx;
注意,有时输入零意味着数据丢失。