【发布时间】:2016-11-12 15:52:15
【问题描述】:
如果另一个数组中的相同元素是 Nothing,我会将数组的元素设置为 Nothing。 (由于各种原因,我无法克隆阵列)。两个数组都是对象类型。但是,当第一个数组 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
【问题讨论】:
-
数组类型有哪些?像整数这样的核心类型使用 Nothing 作为默认值 (0)。例如,
Dim arryx(1, 1) As Int32将创建一个所有元素为 0(默认值)的数组。 -
打开 Option Strict On 并将比较更改为 If objx(i, j) Is Nothing Then x(i, j) = Nothing
-
它们都是对象数组。
-
解决了问题。
-
恕我直言,用值表示缺失值是一个非常糟糕的主意;如果该值选择不当并存在于数组中怎么办?你应该用一个缺失值来表示一个缺失值,当你想表示缺失值时,应该使用设置为 Nothing 的可空整数,因为即使被视为对象数组,
Is Nothing测试也会按预期工作
标签: arrays vb.net missing-data nothing