2009-12-17 37 views
14

Aquí hay un par de preguntas reuní con respecto a la salida de selección ...¿Por qué debería usar exit select?

  1. ¿Hay alguna razón para usar la salida seleccionar en VB.NET?
  2. ¿El motivo tiene algo que ver con el rendimiento?
  3. ¿La salida de selección es igual a break;?

Ejemplo 1

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

end select 

Ejemplo 2

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

case "John" 
'... 
exit select 

case else 

end select 

Respuesta

30

No es el Lo mismo que usar la palabra clave break con switch sentencias de idiomas similares a C. Con un switch, si omite el control de interrupción, pasará al siguiente caso. Con Visual Basic Select, el control no falla; un break ya está implícito.

Sin embargo, se puede usar como una cláusula de guardia, para evitar la necesidad de código de nido de otro nivel en un bloque de if. Por ejemplo:

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 

Eso es un poco mejor que el código 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 

Cualquier diferencia de rendimiento entre estas dos muestras es casi seguro insignificante en comparación con otros factores.

Otro uso es si usted tiene una gran cantidad de casos, y uno de los casos está colocado de manera que un partido significa que desea detener la comprobación de todos los demás. Esto ya sucede, por lo que puede tener una declaración de caso vacía allí. Pero también puede agregar una selección de salida para dejar claro a los mantenedores que espera que este caso no haga nada más.

+2

Realmente creo que el segundo ejemplo es mucho mejor que el primero porque el segundo es estructurado y el primero no. Las instrucciones que rompen el flujo de ejecución (como Goto, Exits, etc.) desestructuran el código. –

+1

@SoMoS: Me gusta tener cláusulas de guardia al principio de los métodos para verificar las condiciones previas, pero en el medio de un Caso Selecto, tiendo a estar de acuerdo con usted en que el segundo ejemplo es mejor en la mayoría de los casos. –

5

Bueno ... Es como usar un Goto ... Una vez que has encontrado el caso correcto no hay uso de "salir "El caso es que en Visual Basic se va a apagar. En C#, necesita salir de la caja (en ese caso, con un descanso).

El punto es que se puede usar en el medio del alcance de un caso, algo así como:

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

Es feo, pero se puede hacer eso ...

+0

De hecho, es así y, como tal, debe evitarse. –