Vb.net 通过引用传递添加到列表中的列表是否是预期行为?
我在使用列表时注意到了一些东西。如果我有一个Vb.net 通过引用传递添加到列表中的列表是否是预期行为?,vb.net,list,byref,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
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
第一对消息将显示“苹果”和“红色”。然后,在更新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
然后用AddListItemToMainList(listRow,listTable)
替换listTable.Add(listRow)
。显然,我的代码不是很动态,我正在硬编码第一个和第二个元素,但我现在只是在测试,以获得正确的逻辑和其他东西
如果有更优雅的解决方案,我会随时听取建议。
listTable.Add(新列表(字符串)(listRow))
@Jimi这肯定是一个更优雅的解决方案。也许吧。不过,这是完全一样的。重要的是取消对原始列表的引用。有时,如果它更可见,则更好。类类型的对象总是通过引用传递(即使它们是标识为ByVal
的参数;令人困惑的是,这意味着引用是通过值传递的,因此不能在调用方中重定目标,而不是对象本身是通过值传递的)。@Craig,Class:Type类型的对象是且不知道,找出对象是否属于该类的最简单方法是什么?listTable.Add(新列表(字符串)(listRow))
@Jimi这肯定是一个更优雅的解决方案。也许吧。不过,这是完全一样的。重要的是取消对原始列表的引用。有时,如果它更可见,则更好。类类型的对象总是通过引用传递(即使它们是标识为ByVal
的参数;令人困惑的是,这意味着引用是通过值传递的,因此不能在调用方中重定目标,而不是对象本身是通过值传递的)。@Craig,Class:Type类型的对象是且不知道,找出对象是否属于该类的最简单方法是什么?