Zac*_*son 2 .net vb.net oop collections scope
我有一个简单的函数,它接受一个List参数.在使用它时,它使用.NET的List(Of T).Reverse方法复制它并反转副本.
Private Function FindThing(ByVal Things As List(Of Thing)) As Thing
Dim ReverseOrderThings As List(Of Thing) = Things
ReverseOrderThings.Reverse()
For Each t As Thing In ReverseOrderThings
...
Next
Return Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
我的参数定义为ByVal.但是,似乎ByVal不会阻止过程中的代码更改列表的顺序.
Dim Things As List(Of Thing) = GetSortedListFromSomewhere()
Dim FoundThing As Thing = FindThing(Things)
For Each t As Thing In Things
...
'OMG! My Things are in reverse order!!1! WTF?'
Next
Run Code Online (Sandbox Code Playgroud)
如何在这样的函数中保护我的list参数?
这是制作列表副本的正确方法.
Dim ReverseOrderThings As List(Of Thing) = New List(Of Thing)(Things)
Run Code Online (Sandbox Code Playgroud)
现在作为参数传递的列表不受Reverse()方法的影响.