For Each ds As DerivedScale In List
If ds.ScaleID = scaleId Then
ds.ScaleID = ds.ScaleID + scaleStep
CType(List(myCounter + scaleStep), DerivedScale).ScaleID = scaleId
myDerivedScale = ds
ds = List(myCounter + scaleStep) <---------------------
List(myCounter + scaleStep) = myDerivedScale
Exit For
End If
myCounter += 1
Next
这篇文章是为2个记录而改变位置并更改序列号(scaleid)。箭头表示问题发生的位置。项目“ds”由对象1索引号更高/更低替换。但这不会影响List中的该对象。因此,当我检查时,项目ds未设置。
但是,当我查看ds.ScaleId = ds.ScaleID + scaleStep时,这会反映在List中。
所以我想知道的是:“ds”在这里表现得像一个局部变量,我只能对它的属性进行更改吗?
提前致谢。
答案 0 :(得分:2)
ds是对列表也引用的对象的引用。因此,当您在其上设置属性时,这些更改也会反映在列表中。但是因为ds只是参考,正如你猜测的那样,改变它所引用的内容不会影响列表。
答案 1 :(得分:1)
你需要通过索引而不是枚举器来遍历列表(你所获得的只是一个引用)。然后,您可以按索引交换对象并更改其属性。
答案 2 :(得分:0)
.Net中的对象通过引用传递。
您的列表中只有一个DerivedScale
个实例; For Each
循环遍历列表中的相同实例
没有复制品;你正在修改对象本身。
答案 3 :(得分:0)
该变量的作用域是声明它的循环。重新分配ds不会改变列表,因为ds和列表都有对某个项的对象引用,您只是在不影响列表的情况下更改ds引用的项。