for循环中的值不会更改

时间:2012-04-15 09:07:45

标签: vb.net list reference

我的VB.NET程序中有一个List结构,我循环遍历它们,并更改列表中对象的值,如下所示

Dim retvals As List(Of SomeStruct) = parser.RetrieveData(new_path)

 For i As Integer = 0 To retvals.Count - 1 Step 1
 dim temp as SomeStruct = retvals(i)

  temp.A = GetValueForA()
  temp.B = GetValueForB() 

 Next

当我在这个循环之后查看我的结构列表时,没有任何值被覆盖。为什么?我以为我的列表中有引用,所以如果我将引用A更改为结构,那么引用B到同一结构应该看到更改?

我错过了什么?

2 个答案:

答案 0 :(得分:2)

结构是值类型,而类是引用类型。如果您要使用SomeClass而不是SomeStruct,则此代码可以按预期工作。

在使用Class的场景中,retvals将是一个指向类对象的指针列表。 “dim temp as ...”会创建指针的副本,并将temp.A设置为某些内容会更改指针指向的对象。因此,当代码完成时,retval中的指针仍指向现在已更改的同一对象。 但是,在使用结构时,不存储指针。 retvals只是结构中存储的值的列表。 “dim temp as ...”创建了整个结构的副本。您可以通过更改temp.A来修改此结构,但原始结构永远不会更改,因为您只修改了它的副本。

答案 1 :(得分:0)

我意识到问题所在,.NET中的Structure值类型,这意味着内容将复制到{{1} }。因此,更改List变量不会更改temp

中的原始变量

我使用List来修复它,这是一种引用类型。