在下面的示例中,如果我在ByRef或ByVal函数中传递List(T)对象,这是否重要?
这是正确的,因为List是一个引用类型,所以即使我传递对象ByVal,值也总是会改变.
如果在更新列表时我在函数"ListChanged"中传递对象byRef会更好吗?
Public Class MyClass_
Public Sub TestMethod()
Dim List_1 As New List(Of Integer)()
Dim List_2 As New List(Of Integer)()
List_1.Add(100)
List_2.Add(50)
List_1 = ActualListNotChanged(List_1) '---101
List_2 = ListChanged(List_2) '---50,51
End Sub
Private Function ActualListNotChanged(ByVal lst As List(Of Integer)) As List(Of Integer)
Dim nList As New List(Of Integer)()
For Each item As Integer In lst
If item <> 50 Then
nList.Add(101)
End If
Next item
Return nList
End Function
Private Function ListChanged(ByVal lst As List(Of Integer)) As List(Of Integer)
lst.Add(51)
Return lst
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
在您的示例中,ByVal(默认值)是最合适的.
ByVal和ByRef都允许您修改列表(例如添加/删除项目).ByRef还允许您用不同的列表替换列表,例如
Dim List1 As New List(Of Int)
List1.Add(1)
ListReplacedByVal(List1)
' List was not replaced. So the list still contains one item
Debug.Assert(List1.Count = 1) ' Assertion will succeed
ListReplacedByRef(List1)
' List was replaced by an empty list.
Debug.Assert(List1.Count = 0) ' Assertion will succeed
Private Sub ListReplacedByVal(ByVal lst As List(Of Integer))
lst = New List(Of Int)
End Sub
Private Sub ListReplacedByRef(ByRef lst As List(Of Integer))
lst = New List(Of Int)
End Sub
Run Code Online (Sandbox Code Playgroud)
一般来说,你应该使用ByVal.您传递的对象可以被修改(在某种意义上,您可以调用其方法和属性设置器来更改其状态).但它不能被不同的对象取代.
| 归档时间: |
|
| 查看次数: |
3227 次 |
| 最近记录: |