.NET列表的范围(T).反向方法

Zac*_*son 2 .net vb.net oop collections scope

我有一个简单的函数,它接受一个List参数.在使用它时,它使用.NET的List(Of T).R​​everse方法复制它并反转副本.

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()方法的影响.

Ros*_*ant 6

复制一份清单.

该函数不能更改列表的值,实际上它不是.它正在改变列表所包含的内容,这是允许的.唯一不允许的是分配变量以引用新列表.