Ich habe eine einfache Funktion, die eine Liste Parameter nimmt. Während sie damit arbeitet, kopiert sie diese und kehrt die Kopie um, indem sie die .NET List(Of T).Reverse Methode.
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
Mein Parameter ist definiert als ByVal . Aber es scheint, dass ByVal den Code in der Prozedur nicht daran hindert, die Reihenfolge der Liste zu ändern.
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
Wie kann ich meinen Listenparameter in einer solchen Funktion schützen?
Aktualisierung:
Dies ist der richtige Weg, um eine Kopie der Liste zu erstellen.
Dim ReverseOrderThings As List(Of Thing) = New List(Of Thing)(Things)
Jetzt wird die als Parameter übergebene Liste von der Methode Reverse() nicht mehr berührt.