如何使用for循环来修改对象本身?

时间:2015-07-09 15:29:41

标签: vb.net

我有一个对象列表。使用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循环中声明变量时,例如vartempMACH.lstnVar中的变量是[20, 20, 20, 'new bottom padding here'] 中的变量,还是对它的引用?

1 个答案:

答案 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

只有当集合实现ForIList时,您才可以使用IList(Of T) - 循环,例如List(Of String)String()。否则你必须重新创建序列。