gpt4 book ai didi

arrays - 一次将数组添加到 ArrayList

转载 作者:行者123 更新时间:2023-12-04 22:25:36 26 4
gpt4 key购买 nike

背景:

我正在尝试填充 ArrayList来自任何给定值数组的对象。

要填充这些对象,您可以使用 .Add方法或 .AddRange方法,但是无论哪种方式,您似乎都需要遍历数组以填充 ArrayList .显然,利用 .AddRange我们需要使用 Queue目的。

代码:
.Add 的示例方法:

Sub Test1()

Dim ArrList As Object: Set ArrList = CreateObject("System.Collections.ArrayList")

With ArrList
For Each ArrItem In Array("A", "B", "C")
If Not .contains(ArrItem) Then .Add ArrItem
Next
End With

End Sub
.AddRange 的示例方法:
Sub Test2()

Dim ArrList As Object: Set ArrList = CreateObject("System.Collections.ArrayList")
Dim Q As Object: Set Q = CreateObject("System.Collections.Queue")

With Q
For Each ArrItem In Array("A", "B", "C")
If Not .contains(ArrItem) Then .Enqueue ArrItem
Next
End With

ArrList.AddRange Q

End Sub

问题:

如您所见,我想知道 .AddRange 的目的是什么方法,如果我们不能直接分配一个数组。我们仍然需要迭代和 .Enqueue他们。

那么如何一次分配一个数组呢?显然,下面会报错(5)出来:
ArrList.AddRange Array("A", "B", "C")

顺便说一句,对于早期绑定(bind),添加 mscorlib.dll引用。

最佳答案

问题是 ArrayList是一个 .NET 对象, AddRange() 方法需要 ICollection 类型的参数.现在,VBA 数组不是 ICollection对象(即,它没有实现 .NET 的 ICollection 接口(interface)),因此,对该方法的调用失败。

原因一个Queue对象的作用在于它确实实现了 ICollection。任何其他ICollection对象也可以。例如,如果您有另一个 ArrayList ,您可以将其传递给 AddRange方法,它会工作得很好。试试这个,例如:

Sub Test()
Dim ArrList1 As Object: Set ArrList1 = CreateObject("System.Collections.ArrayList")
Dim ArrList2 As Object: Set ArrList2 = CreateObject("System.Collections.ArrayList")

ArrList1.Add "A"
ArrList1.Add "B"
ArrList1.Add "C"

ArrList2.AddRange ArrList1
End Sub

所以,底线是:我猜你不走运使用 VBA 数组传递给 ArrayList.AddRange()方法。

关于arrays - 一次将数组添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58060443/

26 4 0