【发布时间】:2017-03-24 17:15:37
【问题描述】:
我有一个函数,它接受一个字符串数组并将每个字符串映射到一个Date 实例。该函数归结为以下代码。
Private Function ParseDates(dates() As String) As Date()
Dim res() As Date
Dim i As Integer
If UBound(dates) >= 0 Then
ReDim res(UBound(dates)) As Date
End If
For i = LBound(dates) To UBound(dates)
res(i) = #01/01/2000#
Next i
ParseDates = res
End Function
只要参数dates 非空,该函数就可以正常工作。当dates 为空时,res 未指定维度。因此,返回的值是不可枚举的,如果在循环中枚举结果,会导致该函数的用户崩溃。
parsedDates = ParseDates(input)
For i = 1 To UBound(parsedDates) ' Suscription out of range
...
当日期为空时,如何实例化并返回一个空数组?
如果您调用Split("","."),您会收到一个类型为String(0 to -1) 的对象。我需要我的函数返回Date(0 to -1) 类型的对象,因为Date() 不是实际数组。
我尝试过使用ReDim res(-1),这会导致Subscript out of range 错误。
【问题讨论】:
-
也许你应该在调用
ParseDates函数之前检查dates()是否为空? -
这也是一个解决方案,但我更希望
ParseDates处理正确类型的所有输入。我还认为代码中充满了所有额外的 If 语句。 -
我最终将函数返回一个可能为空的数组声明为
Variant。这允许我为空数组和我想要的类型的数组返回Split("",",")。 PS。 “创建空数组”如何与“如何确定数组是否在 VB6 中初始化?”重复??