Я заметил что-то при использовании списка списков.Кажется, что если у меня есть List(Of String)
и List(Of List(Of String))
, то, когда я добавляю List(Of String)
к List(Of List(Of String))
, список строк передается по ссылке.
Например, в следующем коде:
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Dim listRow As New List(Of String)
Dim listTable As New List(Of List(Of String))
listRow.Add("Apple")
listRow.Add("Red")
listTable.Add(listRow)
MsgBox(listTable(0)(0))
MsgBox(listTable(0)(1))
listRow(0) = "Banana"
listRow(1) = "Yellow"
MsgBox(listTable(0)(0))
MsgBox(listTable(0)(1))
End Sub
Первая пара сообщений будет отображать «Apple» и «Red».Затем после обновления listRow будут отображаться «Банан» и «Желтый».Для меня это означает, что список был добавлен по ссылке, а не по значению.Я ищу подтверждение этому и, возможно, лучшее объяснение, если оно есть?
Вот как я с этим справлялся:
Sub AddListItemToMainList(myListRow As List(Of String), myListTable As List(Of List(Of String)))
Dim newList As New List(Of String)
newList.Add(myListRow(0))
newList.Add(myListRow(1))
myListTable.Add(newList)
End Sub
Тогда просто замените listTable.Add(listRow)
с AddListItemToMainList(listRow, listTable)
.Очевидно, мой код не очень динамичен, я жестко программирую первый и второй элемент, но сейчас я просто тестирую, чтобы получить правильную логику и все такое.
Если есть более элегантное решение, явсегда открыт для совета.