对象类型数组中的零元素,评估为Nothing

时间:2016-07-10 17:07:09

标签: arrays vb.net missing-data nothing

如果另一个数组中的相同元素为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

2 个答案:

答案 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;

注意,有时输入零意味着数据丢失。