在这个重构案例中更好的技术?

The better technique in this refactoring case?

我需要做一些重构(实际上是很多,但这一小步对整个过程非常有帮助)。所以,假设我有这个代码片段:

If xmlDoc.SelectSingleNode("/dang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/dang")
    Type = "dang"
ElseIf xmlDoc.SelectSingleNode("/nang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/nang")
    Type = "nang"
ElseIf xmlDoc.SelectSingleNode("/lang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/lang")
    Type = "lang"
ElseIf xmlDoc.SelectSingleNode("/tang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/tang")
    Type = "tang"
ElseIf xmlDoc.SelectSingleNode("/xtang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/xtang")
    Type = "xtang"
End If

它在一个大函数的主体中,我想把它拿出来放到一个单独的函数中。所以,我想知道的是,按值传递 universalNodeType 并仅向它们分配值而不需要 return 任何东西是否会更好?这样做效果好还是有风险?

如果我正在处理的只是 Type,即,那么我只会 return 它,但要更改的变量不止 1 个,而且都是本地变量大函数的变量,我从中取出这个代码片段。

还有其他建议吗?

您可以通过引用(而不是通过值)将变量传递给函数,这不是一个坏习惯并且应该有效:

Public Sub MyFunc(ByRef node As MyNode, ByRef typ As String) 
    node = ...
    typ = ...
End Sub

或者您可以return一些复杂的数据持有者:

Public Class MyParams
   Public node As MyNode
   Public typ As String
End Class

Public MyParams MyFunc() 
    Dim result As New MyParams()
    result.node = ...
    result.typ = ...
    Return result
End Sub