gpt4 book ai didi

arrays - VB.NET - 函数无法修改数组的成员

转载 作者:行者123 更新时间:2023-12-04 04:33:20 25 4
gpt4 key购买 nike

我试图将一个数组传递给一个 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 但对于数组我认为这并不重要。 ——

最佳答案

在上次编辑中,您试图为空数组赋值,因此它应该启动 Object reference not set to an instance of an object异常(exception),您需要在声明时指定数组边界:

Dim a(0) As String
a(0) = "FirstValue"

或者你可以这样做:
Dim a As String() = {"FirstValue"}

您在问题上发布的第一个代码效果很好(修复了一些语法),我所做的下一个修改也有效,如果您仍然遇到数组边界/值的问题,那么错误可能出在代码的其他部分.为确保这不是变量问题,请像本示例中那样从任何方法中声明它。
Public Class Form1
Private a As String()

Private Sub Test() ' Handles MyBase.Shown
PopulateDataSet("Hello", a) : MsgBox(a.First)
PopulateDataSet("World!", a, 5) : MsgBox(a(5))
PopulateDataSet("I've said Hello World!", a, 10) : MsgBox(a.Last)
End Sub

Public Sub PopulateDataSet(ByVal NewValue As String,
ByRef Array As String(),
Optional ByVal ItemIndex As Integer = 0)

If Array Is Nothing Then
System.Array.Resize(Array, 1)
ElseIf Not Array.Count > ItemIndex Then
Do Until Array.Count > ItemIndex
System.Array.Resize(Array, Array.Count + 1)
Loop
End If

Array(ItemIndex) = NewValue

End Sub

End Class

关于arrays - VB.NET - 函数无法修改数组的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com