【发布时间】:2013-11-25 04:37:24
【问题描述】:
我正在尝试将数组传递给 Sub,以便 Sub 可以修改数组的值之一。
类似的东西
Dim a As String = "STARTVALUE"
PopulateDataSet("Management", {a})
Public Sub PopulateDataSet(ByRef SomeRandomOtherVariable As String, ByRef ToBePopulatedVariables() As String)
ToBePopulatedVariables(0) = "TheNewValue"
End Sub
当我运行代码时,我可以单步执行 Sub 并查看 ToBePopulatedVariables(0)(即变量 A)的值“STARTVALUE”,然后该值更改为“TheNewValue”。
但是当控制权被传递回调用代码时,a 的值会恢复为“STARTVALUE”。
我已经尝试了我能想到的一切。有什么想法吗?
@karl-anderson 和 Nadeem_MK 都提出了同样的建议。
但是
Dim a As String()
a(0) = "FirstVariable"
PopulateDataSet("Management", {a})
返回“对象引用未设置为对象的实例。”
将值赋给a(0)时
然而
Dim a As String() = {"FirstVariable"}
运行。
但我仍然坚持没有将新值返回给调用代码。我试过这样做 ByVal 和 ByRef 但对于数组我认为这并不重要。 ——
【问题讨论】:
-
字符串在 .Net 中是不可变的。更改数组第一个元素的值,不会更改
a指向的字符串。相反,它会创建一个新字符串并使数组的第一个元素指向该字符串。