У меня есть простая функция, которая принимает параметр List. Работая с ним, он копирует его и переворачивает копию, используя метод * .NET 100 * * List (Of T).
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
Мой параметр определен как 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
Как я могу защитить свой список параметров в такой функции?
Обновление:
Это правильный способ сделать копию списка.
Dim ReverseOrderThings As List(Of Thing) = New List(Of Thing)(Things)
Теперь на список, переданный в качестве параметра, метод Reverse () не влияет.