2010-08-11 9 views
5

HI, mi chiedevo quali sono i vostri pensieri sono sulla gestione delle eccezioni, vale a dire Ho un metodo:Dove rilevare le eccezioni quando si è all'interno di un loop?

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

Devo aggiungere il blocco try di cattura per la gestione per l'intero ciclo o semplicemente il codice che è più un'eccezione vunerable o qualcos'altro? Qual è la migliore pratica?

+0

Vedere http://stackoverflow.com/questions/22623/net-throwing-exceptions- best-practice sebbene non sia un duplicato esatto. – ChrisF

risposta

0

La mia preferenza è di mantenere la gestione delle eccezioni il più vicino possibile al codice che genera l'eccezione. Questo ti dà la migliore traccia di stack. Lo metterei nel circuito. YMMV

+3

Di solito, dove si verifica l'eccezione _non è dove il programma è pronto per gestirlo. –

0

che dipendono di quello che stai facendo

se si prevede di continuare l'iterazione quando alcuni raise eccezione, naturalmente, si inserisce il blocco try cattura in per.

se si desidera interrompere l'operazione quando si verifica un errore, il modo migliore è inserire nel blocco di prova.

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

     }catch (Exception e) { 

     } 
    } 

Durata 16 ms.

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

     } 
    }catch (Exception e) { 

    } 

Durata 0ms.

2

Dipende da come si desidera che il codice scorra.

Ad esempio, il ciclo continua ad essere eseguito anche se un elemento genera un'eccezione? Se è così, allora vuoi il tuo tentativo/cattura nel for. Se no, allora vuoi il tuo tentativo/prendere in giro per il.

9

La risposta è su quale livello si desidera/può gestirlo. Se l'elaborazione di un elemento può fallire ma è possibile continuare l'elaborazione, utilizzare try catch inside loop. se è possibile che si verifichi un errore e non è possibile continuare, utilizzare la funzione try catch esterna.

0

Meno linee si possono identificare come problematiche, meglio è. Quindi dovresti metterli all'interno del blocco catch try.

1

Dipende.

Continuare a elaborare gli elementi se si colpisce un'eccezione su un singolo elemento? Quindi gestire l'eccezione all'interno del ciclo.

Vuoi interrompere l'elaborazione del ciclo se viene rilevata un'eccezione? Quindi gestire l'eccezione al di fuori del ciclo.

Problemi correlati