2013-03-26 193 views
0

我需要的解决方案如何为您在我的代码重复CASE声明。如何检查重复的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箱子并不能手工检查。

+1

'Case'可以包括表达式,所以一般你无法检查是否有在编译时重复。即使你只有常量,你应该做的是重构你的代码,不要包含任何'case's。 – GSerg 2013-03-26 09:35:22

+0

布拉,这意味着没有解决方案来检查是否有重复?我能做到的只有手册吗? – Hoh 2013-03-26 09:37:43

回答

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

你可以使用不同的方法: 定义字符串的解释与行动

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 

然后,而不是调用一个无限的选择情况下,您可以添加只有一行

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

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

+0

我必须使用CASE语句,因为我真的呼吁从SQL Server这种情况下,出现在我的菜单项 – Hoh 2013-03-26 10:12:01

+0

好吧,我不明白您的评论,但是我很高兴你已经找到了可行的解决方案。 – Steve 2013-03-26 10:14:30