添加到列表中的列表通过引用传递是否是预期行为?

时间:2019-05-17 19:35:02

标签: vb.net list byref

在使用列表列表时,我注意到了一些东西。看来,如果我有一个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)。显然,我的代码不是很动态,我正在对第一个和第二个元素进行硬编码,但是我现在只是在测试,以了解逻辑和不正确的地方。

如果有更优雅的解决方案,我会随时征求意见。

0 个答案:

没有答案