Есть ли способ добавить в список (из списка (из String)) byVal? - PullRequest
0 голосов
/ 24 сентября 2018

Я бы хотел многократно добавлять списки строк в большую коллекцию списков, но похоже, что функция 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, затем зациклил, чтобы добавить еще один внутренний элемент.

1 Ответ

0 голосов
/ 24 сентября 2018

List<T> является ссылочным типом.Единственный способ не повлиять на это при вызове Clear() - вместо этого добавить его клон в external.Вы можете сделать это, используя .ToList()

outer.Add(inner.ToList())

Но на самом деле я думаю, что самый простой способ - вместо этого назначить внутри новый List вместо вызова Clear, чем вы должны делать выше.

inner = new List(Of String)
...