2 Stimmen

Anwendungsbereich der Methode List(Of T).Reverse von .NET

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.

0voto

Richard Punkte 103159

Ihr Parameter übergibt den Verweis auf die Liste als Wert, nicht die Liste selbst. Wie andere bemerkt haben, müssen Sie eine Kopie erstellen, LINQ's ToList() Erweiterungsmethode wird dies problemlos möglich sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X