2009-12-17 18 views
14

Qui ci sono un paio di domande che ho raccolto per quanto riguarda l'uscita select ...Perché dovrei usare exit select?

  1. v'è alcuna ragione per utilizzare l'uscita selezionare in VB.NET?
  2. La ragione ha qualcosa a che fare con le prestazioni?
  3. L'uscita seleziona uguale a break;?

Esempio 1

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

end select 

Esempio 2

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

case "John" 
'... 
exit select 

case else 

end select 

risposta

30

Non è la come usare la parola chiave break con le dichiarazioni switch da lingue simili a C. Con un switch, se si omette il controllo di interruzione, questo passerà al caso successivo. Con Visual Basic Select, il controllo non passa attraverso; uno break è già implicito.

Tuttavia, è possibile utilizzarlo come clausola di protezione, per evitare di dover annidare il codice di un altro livello in un blocco if. Per esempio:

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 

Questo è un po 'più bello di questo codice equivalente:

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 

Qualsiasi differenza di prestazioni tra questi due campioni è quasi certamente insignificante rispetto ad altri fattori.

Un altro uso è se si hanno molti casi e uno dei casi è posizionato in modo che una corrispondenza significhi che si desidera interrompere il controllo di tutti gli altri. Questo succede già, quindi potresti avere solo una dichiarazione vuota. Ma potresti anche aggiungere un Exit Select per chiarire ai manutentori che ti aspetti che questo caso non faccia altro.

+2

Credo davvero che il secondo esempio sia molto più bello del primo perché il secondo è strutturato e il primo non lo è. Le istruzioni che interrompono il flusso di esecuzione (come Goto, Exits, ecc.) Distruggono il codice. –

+1

@SoMoS: Mi piace avere clausole di guardia all'inizio dei metodi per controllare le condizioni preliminari, ma nel bel mezzo di un caso di selezione, tendo ad essere d'accordo con te sul fatto che il secondo esempio è migliore nella maggior parte dei casi. –

5

Beh ... E 'come usare un goto ... Una volta trovato il caso corretto non v'è alcuna utilità nel "uscire "il caso da quando in Visual Basic uscirà. In C# è necessario uscire dal caso (in tal caso, con una pausa).

Il punto è che si può utilizzare nel bel mezzo del campo di applicazione di un caso, qualcosa come:

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

E 'brutto, ma si può fare che ...

+0

In effetti è e come tale dovrebbe essere evitato. –