0

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

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 到同一个结构应该会看到更改吗?

我错过了什么?

4

2 回答 2

2

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

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

于 2012-04-15T09:16:02.783 回答
0

我意识到问题出在哪里,Structure在 .NET 中是一个值类型,这意味着内容将被复制List. 所以改变temp变量不会改变原来的List

我通过使用 aclass来修复它,它是一个引用类型。

于 2012-04-15T09:14:40.077 回答