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

コードに重複したステートメントが2つあることがわかるように、コードに500を超えるケースがあり、手動でチェックできないためCase、重複したステートメントがあるかどうかを何らかの方法でチェックする必要があります。Case

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
  • 正規表現に一致する行ごとに(フォーマットに一貫性がない場合は調整する必要があります)、プロパティラベル付きのカスタムオブジェクトを渡します。
  • 結果をそのラベルでグループ化します。
  • ラベルが1回だけ発生するすべてのケースを削除します
  • グループ名(ラベル)を返します。
于 2013-03-26T09:44:27.210 に答える
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を呼び出す代わりに、1行だけ追加できます。

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

もちろん、呼び出したいすべての関数を実行して、それらのアドレスを辞書に挿入する必要がありますが、実行時に重複するテストケースを追加しようとすると、例外メッセージが表示されて停止します。

于 2013-03-26T10:10:45.093 に答える