我有一个对象列表。使用for循环我搜索我想要修改的对象,找到我的对象后,我想在tempMach.lstnVar
中完全修改我的对象。以下是我的代码:
For Each var As ListenVariable In tempMACH.lstnVar
If var.varName = newLstnVar.varName Then
var = DeepClone(newLstnVar)
Exit For
End If
Next
深度克隆功能会创建newLstnVar
的深层克隆。循环将值分配给var
,但是当循环完成时,tempMACH
中没有变化。我真的很困惑=
运算符如何处理对象。当我使用=
时,它会分配引用还是值?当我在for循环中声明变量时,例如var
,tempMACH.lstnVar
中的变量是[20, 20, 20, 'new bottom padding here']
中的变量,还是对它的引用?
答案 0 :(得分:0)
如果要替换对象本身,则无法使用For...Each
,因为您无法为循环变量分配任何内容。而是使用For
-loop:
For i As Int32 = 0 To tempMACH.lstnVar.Count() - 1
Dim obj As ListenVariable = tempMACH.lstnVar(i)
If obj.varName = newLstnVar.varName Then
tempMACH.lstnVar(i) = DeepClone(newLstnVar)
Exit For
End If
Next
只有当集合实现For
或IList
时,您才可以使用IList(Of T)
- 循环,例如List(Of String)
或String()
。否则你必须重新创建序列。