我需要解决方法如何在我的代码中检查重复的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个案例,并且可以检查一下。
答案 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()
当然,您需要调用所有要调用的函数并将其地址插入字典中,但如果您尝试在运行时添加重复的测试用例,则会停止并显示异常消息。