首页 > 解决方案 > 在 VB.net 中替代 GoSub

问题描述

我被分配了一个项目来替换GoSubs基于应用程序中的所有内容,VBA因为该应用程序正在切换到VB.net并且GoSubs在那里不受支持。这是原始代码的简化版本:

Sub Main ()
  Dim A As String
  ...
  If ConditionX Then A = "Black"
  Else A = "White"
  End If
  ...
  GoSub Execute
  ...
  Execute:
    Call BuiltInSub1 (A)
    Call BuiltInSub2 (A)
    'where BuiltInSubs are some predefined procedures within the application
    ...
  Return

End Sub

我正在考虑使用 aCall替换GoSub如下:

Sub Main ()
  Dim A As String

  If ConditionX Then A = "Black"
  Else A = "White"
  End If
  ...
  Call Execute
  ...

End Sub

Sub Execute ()
   ...
   Call BuiltInSub1 (A)
   Call BuiltInSub2 (A)
   ...
End Sub

我上面修改版本的明显错误是变量A没有在Sub Execute. 我能想到的一种选择是重新定义Ain Sub Execute,但要做到这一点,我需要重新声明用于A在 Main 中定义的所有变量,其中有很多。

在我的情况下,最好/最有效的替换方法是GoSub什么?

标签: vbavb.netvb6-migration

解决方案


根据我上面的评论,您的代码应如下所示:

Sub Main ()
  Dim A As String

  If ConditionX Then A = "Black"
  Else A = "White"
  End If
  ...
  Execute(A)
  ...

End Sub

Sub Execute(A As SomeType)
   ...
   BuiltInSub1(A)
   BuiltInSub2(A)
   ...
End Sub

如果您确实发现需要声明参数ByRef,您可能希望将重构视为更长期的解决方案。


推荐阅读