如何检查重复的CASE语句?

时间:2013-03-26 09:32:23

标签: vb.net

我需要解决方法如何在我的代码中检查重复的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个案例,并且可以检查一下。

2 个答案:

答案 0 :(得分: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
  • 的内容
  • 对于与正则表达式匹配的每一行(如果格式不一致,则需要调整此行),并传递带有属性标签的自定义对象。
  • 按该标签对结果进行分组。
  • 删除标签仅出现一次的所有情况
  • 返回组名称(标签)。

答案 1 :(得分:1)

您可以使用不同的方法: 定义字符串和动作词典

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()

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