有没有一种方法可以通过 Val 添加到列表(列表(字符串))?

Is there a method to add to a list (of list(of String)) byVal?

我想将字符串列表重复添加到更大的列表集合中,但 list.add 函数似乎正在添加项目 byref。我如何更改下面的示例代码以传递元素 byval 以便在我重新使用变量时它们不会被清除:

    Dim inner As New List(Of String)
    Dim outer As New List(Of List(Of String))
    Dim eleCount As Integer = 0
lbltop:
    inner.Add("a")
    inner.Add("b")
    inner.Add("c")

    outer.Add(inner)
    Debug.Write(outer(0)(0).ToString())
    inner.Clear()

    Debug.Write(outer(0)(0).ToString())

    eleCount += 1
    If eleCount < 2 Then
        GoTo lbltop
    End If

这写了 a 然后下一个 debug.write 语句有一个超出范围的异常。

我希望它写 aa 然后循环添加另一个内部元素。

List<T> 是引用类型。在调用 Clear() 时不影响它的唯一方法是将它的克隆添加到外部。您可以使用 .ToList()

outer.Add(inner.ToList())

但实际上我认为最清楚的方法是在内部分配一个新列表而不是调用 Clear,而不是上面你不必做的。

inner = new List(Of String)