2010-08-11 21 views
5

HI, me preguntaba cuáles son sus pensamientos sobre el manejo de excepciones, es decir, tengo un método:¿Dónde atrapar excepciones cuando está dentro de un bucle?

public void Method{} 
{ 
    for (int i=0;i < length) 
    { 
    // dosomething that may case exception 
    ... 
    ... 
    // rest of the code 
    } 
} 

¿Debo agregar el bloque intento de captura para el manejo de todo el bucle o simplemente el código que es más una excepción vunerable o algo más? ¿Cuál es la mejor práctica?

+0

Consulte http://stackoverflow.com/questions/22623/net-throwing-exceptions-best-practices aunque no es un duplicado exacto. – ChrisF

Respuesta

0

Mi preferencia es mantener el manejo de excepciones tan cerca del código que arroje la excepción como sea posible. Esto te da el mejor seguimiento de la pila. Yo lo pondría dentro del circuito. YMMV

+3

Por lo general, donde ocurre la excepción _no es_ donde su programa está listo para manejarlo. –

0

Eso depende de lo que estás haciendo

si va a continuar la iteración cuando algún aumento excepción, naturalmente, se pone el bloque de intento de captura en para.

si desea detener la operación cuando se produce algún error, la mejor manera es colocarlo en el bloque try catch.

for (int i = 0; i < 10000000; i++) { 
     try { 

     }catch (Exception e) { 

     } 
    } 

Duración 16 ms.

try { 
     for (int i = 0; i < 10000000; i++) { 

     } 
    }catch (Exception e) { 

    } 

Duración 0ms.

2

Depende de cómo desee que fluya su código.

Por ejemplo, ¿el ciclo debe continuar ejecutándose incluso si un elemento arroja una excepción? Si es así, entonces quieres tu try/catch dentro del for. Si no es así, entonces quiere que su try/catch tenga lugar.

9

La respuesta es en qué nivel desea/puede manejarlo. Si el procesamiento de un elemento puede fallar pero puede continuar el procesamiento, use try catch inside loop. si puede ocurrir un error y no puede continuar, utilice la captura de prueba externa.

0

Cuantas menos líneas pueda identificar como problemáticas, mejor. Luego, debe colocarlos dentro del bloque try catch.

1

Eso depende.

¿Desea continuar procesando elementos si golpea una excepción en un solo elemento? Luego maneje la Excepción dentro del ciclo.

¿Desea detener el procesamiento de bucles si se produce una excepción? Luego maneje la Excepción fuera del ciclo.

Cuestiones relacionadas