2009-12-17 3 views
14

Hier sind ein paar Fragen, die ich wählen Sie über Ausgang gesammelt ...Warum sollte ich exit auswählen?

  1. Gibt es einen Grund für die Verwendung von Exit wählen in VB.NET?
  2. Hat der Grund etwas mit Leistung zu tun?
  3. Ist der Ausgang gleich break;?

Beispiel 1

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

end select 

Beispiel 2

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

case "John" 
'... 
exit select 

case else 

end select 

Antwort

30

Es ist nicht die Das Gleiche gilt für die Verwendung des Schlüsselworts break mit switch Anweisungen aus C-ähnlichen Sprachen. Mit einem switch, wenn Sie die Unterbrechungssteuerung weglassen, wird es zum nächsten Fall durchfallen. Mit einem Visual Basic Select fällt die Steuerung nicht durch; a break ist bereits impliziert.

Sie können es jedoch als Wächterklausel verwenden, um zu vermeiden, dass Sie eine andere Ebene in einem if Block verschachteln müssen. Zum Beispiel:

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 

Das ist ein wenig schöner als dieser entsprechende Code ist:

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 

Jeder Performance-Unterschied zwischen diesen beiden Proben ist mit ziemlicher Sicherheit unbedeutend im Vergleich zu anderen Faktoren.

Eine andere Verwendung ist, wenn Sie viele Fälle haben, und einer der Fälle ist platziert, so dass eine Übereinstimmung bedeutet, dass Sie aufhören möchten, alle anderen zu überprüfen. Das ist bereits der Fall, und Sie haben dort möglicherweise eine leere Case-Anweisung. Sie können jedoch auch eine Exit-Auswahl hinzufügen, um Betreuern klar zu machen, dass dieser Fall nichts anderes zu tun hat.

+2

Ich denke wirklich, dass das zweite Beispiel viel schöner ist als das erste Beispiel, weil das zweite Strukturiert ist und das erste nicht. Anweisungen, die den Ausführungsfluss unterbrechen (wie Goto, Exits usw.), strukturieren den Code nicht. –

+1

@SoMoS: Ich mag Guard-Klauseln am Anfang von Methoden, um Vorbedingungen zu überprüfen, aber in der Mitte eines Select-Falles, stimme ich Ihnen zu, dass das zweite Beispiel in den meisten Fällen besser ist. –

5

Nun ... Es ist wie ein GOTO ... Sobald Sie den richtigen Fall gefunden gibt es keine Verwendung in „Verlassen "Der Fall, da in Visual Basic wird es ausgehen. In C# müssen Sie den Fall (in diesem Fall mit einer Pause) beenden.

Der Punkt ist, dass man es in der Mitte des Umfangs eines Falles, so etwas wie zu verwenden:

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

Es ist hässlich, aber man kann das tun ...

+0

In der Tat ist es und als solches sollte es vermieden werden. –