我創建了下面的遞歸程序來獲取所有選中的節點在一個TreeView:將對象ByRef傳遞給sub而不是使用函數 - 這是不好的編程習慣......爲什麼?
Sub GetAllCheckedNodes(ByVal tn As TreeNode, ByRef NodesList As List(Of TreeNode))
If tn.Checked Then NodesList.Add(tn)
For Each nd As TreeNode In tn.Nodes
GetAllCheckedNodes(nd, NodesList)
Next
End Sub
基本上,我用這將是宣佈一個空List(Of Treenode)
,然後將其傳遞到這個例程的第二個參數的方式。 我的問題是,我被告知這是「不是很好」的編程練習 - 爲什麼會出錯?
這似乎是我可以想出的最優雅的解決方案來實現這個工作。
LO和BEHOLD !!! - 沒有'ByRef'就可以工作......我想我對'Byref'的含義有一個不正確的想法。我一直認爲這意味着你正在處理原始變量,而「ByVal」給你一個變量的副本,而不是......如果你願意,你能指點我瞭解差異的正確方向/解釋使用請問ByRef'? –
當你傳遞一個引用類型'ByRef'時,你傳遞了對引用的引用。它將允許您更改變量以引用*不同*列表。我會挖掘一個鏈接... –
@JohnBustos這正是它的意思。在這種情況下,變量不是列表本身,因爲'List'是一個引用類型。該變量除了提供實際列表的位置...在其他地方沒有任何關係。無論您是通過值還是通過引用複製該引用*都無關緊要,因爲您不會更改引用的內容,而只是更改引用指向的對象。 – Servy