在過去一周左右的時間里,我的代碼遇到了一個問題,我一直在努力找出它的問題所在。我已經從我的主要專案中提取并隔離了問題,但問題仍然不明顯。
從本質上講,我有一個通常可以做很多事情的函式,但在這個例子中只更改了一個名為 FalseTable 的陣列中的 1 個元素。現在,我已將此變數設定為 ByVal,這意味著原始變數(即:TrueTable)不應更改,但是,它會更改!這是完整的代碼:
Dim TrueTable(7) As Char
Sub Main()
Dim FalseTable(7) As Char
For x = 0 To 7
TrueTable(x) = "T"
Next
For x = 0 To 7
FalseTable(x) = "F"
Next
Console.WriteLine("before")
For x = 0 To 7
Console.Write(TrueTable(x))
Next
Console.WriteLine()
Test(TrueTable)
Console.WriteLine("result")
For x = 0 To 7
Console.Write(TrueTable(x))
Next
Console.WriteLine()
Console.ReadLine()
End Sub
Function Test(ByVal FalseTable() As Char) As Char()
FalseTable(0) = "0"
Return FalseTable
End Function
現在,我曾經認為這是函式中名稱“FalseTable”的重復,但是即使我將函式更改為:
Function Test(ByVal SomeTable() As Char) As Char()
SomeTable(0) = "0"
Return SomeTable
End Function
并且不修改其余部分,問題仍然存在 - 由于某種原因,由于 ByVal 狀態,TrueTable 正在更新不應該更新。
對此的任何幫助將不勝感激;這可能是我忽略了一些愚蠢的事情,但它正在拉我的頭發!!
非常感謝,阿爾菲 :)
uj5u.com熱心網友回復:
如果您不想更改TrueTable,請定義另一個 Array 并復制TrueTable到它。
這是您可以參考的代碼。
Dim TrueTable(7) As Char
Dim TrueTable2(7) As Char
Sub Main()
For x = 0 To 7
TrueTable(x) = "T"c
Next
Console.WriteLine("before")
For x = 0 To 7
Console.Write(TrueTable(x))
Next
Console.WriteLine()
TrueTable.CopyTo(TrueTable2, 0)
Test(TrueTable2)
Console.WriteLine("result")
For x = 0 To 7
Console.Write(TrueTable(x))
Next
Console.WriteLine()
Console.ReadLine()
End Sub
結果:

uj5u.com熱心網友回復:
要了解為什么會發生這種情況,請想象一下這種情況。
您有一個常規的 TextBox1(這將是您的 TrueTable),現在您想將物件 TextBox1 傳遞給一個函式,如下所示:
Function Test(ByVal TextBoxAnything as TextBox) As String
TextBoxAnything.Text = "0"
Return ""
End Function
你明白你是通過 TextBox1 傳遞的,一旦進入函式 Test 物件 TextBoxAnything 就是 TextBox1,你對 TextBoxAnything 做的任何事情都只是對 TextBox1 做。TextBoxAnything 不存在,它只是指向 Textbox1。這就是 TrueTable 的值也會改變的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392465.html
