也许这是一个n00bish问题,但是我已经习惯了c ++的指针和引用,这让我有些困惑。假设我在VB.net应用程序中有以下情形:

Dim x As New Dictionary(Of String, MyType)
'I add stuff to x
Dim y As MyObject= x("foo1")
'later...
y = New MyType()
'now y and x("foo1") don't point to the same instance anymore


情况是这样的:我有一个对象集合,并且在程序执行期间,可以从该集合中提取任何对象,以供程序的另一部分使用/编辑。现在很明显,如果我编辑对象内部的数据没问题,但是如果要替换对象,就像上面第5行一样,该怎么办?我只更改本地引用(y),而不更改集合内的对象!有没有解决的办法?如何携带“对对象引用的引用”,而不只是引用,所以如果我重新分配它,它也将重新分配集合中的那个?我希望我能使自己清楚,但是很遗憾,英语不是我的母语:在c ++中,使用指向指针的指针或总是通过引用将指针传递给对象很容易,因此调用new或reassignment它将改变原始指针本身)

提前致谢。

最佳答案

您不能在VB.NET(或C#,除非通过unsafe代码)中使用指针。

相反,要更改已分配给y的字典中的原始值,您需要通过字典对象本身而不是通过引用来再次访问它:

x("foo1") = New MyType()


原因是字典中指定位置(“ foo1”)的值分配给y,而不是字典中位置本身的引用。我不太确定为什么要使用DataObject类,但是在代码中分配了y类型的值时,它会包含MyType类型的值。为y分配新值将仅更改y的值,而不更改字典中的原始值。它不知道该值。从本质上考虑它,就好像您要从字典中拉出值的副本并将其放在y变量中一样。无法将引用复制到词典中的页面。

10-07 15:55
查看更多