【发布时间】:2020-01-03 22:58:09
【问题描述】:
我有一个自定义类,以及该类的 700 个实例。其中一些实例共享特定属性 (TourID) 的相同值。我想根据 TourID 的值将这些实例组装到二维数组或集合中。
创建 2D 数组会给我一个类型不匹配错误,并且创建一个集合不允许我将具有 TourID 值的键分配给项目。
Dim list_of_stops() As New Stops
For i = 0 To UBound(list_tours)
LastValue = Ubound(list_of_stops(list_tours(i).TourID))
Redim Preserve list_of_stops(list_tours(i).TourID, LastValue + 1)
list_of_stops(list_tours(i).TourID, LastValue) = list_tours(i)
Next
我希望 list_of_stops() 的结构如下:
list_of_stops(1,0) = first stop with tour ID = 1
list_of_stops(1,1) = second stop with tour ID = 1
...
list_of_stops(1,n) = n-th stop with tour ID = 1
...
list_of_stops(n,n) = n-th stop with tour ID = n
【问题讨论】:
-
当
list_of_stops()尚未确定尺寸时,LastValue = Ubound(list_of_stops(list_tours(i).TourID))有什么意义?无论如何,1)字典而不是集合可能是一个不错的选择,2)minimal reproducible example 会有所帮助。如果不付出过多的努力,我们实际上无法运行您的代码。 -
另外——数组声明行中的
New没有意义 -
@JohnColeman 它使每个数组元素成为一个自动实例化的对象......这确实很奇怪(从未见过),但显然是合法的。
Dim foo(1 To 10) As New Collection然后Debug.Print foo(2) Is Nothing将输出False,即使您从未为任何对象引用设置任何下标。 -
@MathieuGuindon 很有趣。我很惊讶它是合法的。
-
@JohnColeman 我也是,很高兴 RD 的 SelfAssignedDeclaration 检查正在标记它 =)