web-dev-qa-db-ja.com

なぜexitselectを使用する必要があるのですか?

出口選択に関して私が集めたいくつかの質問があります...

  1. VB.NETでexitselectを使用する理由はありますか?
  2. その理由はパフォーマンスと関係がありますか?
  3. 出口選択はbreak;と同じですか?

例1

Select case Name
case "Mary"
'...
case "John"
'...
case else

end select

例2

Select case Name
case "Mary"
'...
exit select

case "John"
'...
exit select

case else

end select
19
OrElse

これは、Cのような言語のbreakステートメントでswitchキーワードを使用することと同じではありません。 switchを使用すると、ブレークコントロールを省略すると、次のケースにフォールスルーします。 Visual Basic Selectを使用すると、制御が失敗しません。 breakはすでに暗示されています。

ただし、ifブロックに別のレベルのコードをネストする必要がないように、ガード句として使用できます。例えば:

Select Case SomeEnumVar
    Case SomeEnum.SomeValue1
         If Not SomeCondition Then Exit Select
         'Do something
    Case SomeEnum.SomeValue2
         'Do something else
    Case Else
         'Default case
End Select

これは、この同等のコードよりも少し優れています。

Select Case SomeEnumVar
    Case SomeEnum.SomeValue1
         If SomeCondition Then
             'Do something
         End If
    Case SomeEnum.SomeValue2
         'Do something else
    Case Else
         'Default case
End Select

これら2つのサンプル間のパフォーマンスの違いは、他の要因と比較してほぼ確実に重要ではありません。

もう1つの用途は、ケースが多数あり、ケースの1つが、他のすべてのチェックを停止することを意味するように配置されている場合です。これはすでに発生しているため、空のcaseステートメントがある可能性があります。ただし、Exit Selectを追加して、このケースが他に何もしないことを期待していることをメンテナに明確にすることもできます。

37
Joel Coehoorn

ええと... gotoを使用するようなものです...正しいケースを見つけたら、Visual Basicではケースが消えるので、ケースを「終了」しても意味がありません。 C#では、ケースを終了する必要があります(その場合は、休憩を入れて)。

重要なのは、次のように、ケースのスコープの中央で使用できるということです。

Case 1
   Do something
   Do something
   Evaluate
      exit select
   Else
      Do something

それは醜いです、しかしあなたはそれをすることができます...

5
gbianchi