0

我需要如何在我的代码中检查重复CASE语句的解决方案。

例子:

                Case "TEST1"
                    Dim ZR As New srv_test.frm1
                    ZR.ContinueInit()
                    ZR.MdiParent = Me
                    ZR.Show()
                Case "TEST2"
                    Dim BU As New srv_test.frm2
                    BU.ContinueInit()
                    BU.MdiParent = Me
                    BU.Show()
                Case "TEST1"
                    Dim ZR As New srv_test.frm1
                    ZR.ContinueInit()
                    ZR.MdiParent = Me
                    ZR.Show()

如您所见Case,我的代码中有两个重复的语句,我需要以某种方式检查是否有任何重复的Case语句,因为我的代码中有 500 多个案例并且无法手动检查。

4

2 回答 2

1

因为我的代码中有超过 500 个案例,无法手动检查。

真正的答案:找到比如此庞大的声明更好的方法。

快速、短期的修复:使用文本处理工具选择适用的行、提取标签并过滤掉唯一值。这将识别您可以在常用编辑器中找到的标签。使用 PowerShell 会是这样的:

get-content *.vb | %{ if ($_ -cmatch 'Case\s+"(\w+)"') { New-Object PSObject -prop @{label=$matches[1]} } } | group label | ?{$_.Count -gt 1} | %{$_.Name}

哪个:

  • 读取所有文件的内容*.vb
  • 对于与正则表达式匹配的每一行(如果您的格式不一致,则需要进行调整),并传递带有属性标签的自定义对象。
  • 按该标签对结果进行分组。
  • 删除标签只出现一次的所有情况
  • 返回组名(即标签)。
于 2013-03-26T09:44:27.210 回答
1

您可以使用不同的方法:Define a Dictionary of string and Actions

Dim dic = new Dictionary(Of string, Action)()
dic.Add("TEST1", AddressOf RunTest1)
dic.Add("TEST2", AddressOf RunTest2)
dic.Add("TEST3", AddressOf RunTest3)
....
dic.Add("TEST1", AddressOf RunTestXXXX) 'the runtime will not allow this case'

Private Sub RunTest1
    Dim ZR As New srv_test.frm1
    ZR.ContinueInit()
    ZR.MdiParent = Me
    ZR.Show()
End Sub
Private Sub RunTest2
    Dim BU As New srv_test.frm2
    BU.ContinueInit()
    BU.MdiParent = Me
    BU.Show()
End Sub
Private Sub RunTest3
    Dim ZR As New srv_test.frm1
    ZR.ContinueInit()
    ZR.MdiParent = Me
    ZR.Show()
End Sub
Private Sub RunTestXXXX
.....
End Sub

然后,您可以只添加一行,而不是调用无限的 Select Case

 currentTest = "TEST1"       
 dic(currentTest).Invoke()

当然,您需要调用所有要调用的函数并将它们的地址插入字典中,但是如果您尝试在运行时添加重复的测试用例,您将停止并显示异常消息。

于 2013-03-26T10:10:45.093 回答