2012-11-27 9 views
5

in MSDN link, si è detto che
Non gettare System.Exception o System.SystemException.
Nel mio codice che sto gettando in questo modoLe migliori pratiche per la cattura e gettando l'eccezione

private MsgShortCode GetshortMsgCode(string str) 
     { 
      switch (str.Replace(" ","").ToUpper()) 
      { 
       case "QNXC00": 
        return MsgShortCode.QNXC00; 
       default: 
        throw new Exception("Invalid message code received"); 
      } 
     } 

si tratta di una cattiva pratica ??

risposta

9

Generalmente si può essere più espliciti.

In questo caso, si può buttare un

ArgumentException 

Più specifico si è, più facile è per altro codice per gestire l'eccezione.

Questo permette di fare

try 
{ 
    GetshortMsgCode("arg") 
} 
catch(ArgumentException e) 
{ 
    //something specific to handle bad args, while ignoring other exceptions 
} 
3

In questo caso specifico si dovrebbe essere buttare ArgumentException.

Il punto principale di specifici tipi di eccezione è di pensarci dal punto di vista del chiamante. Capisco che questo sia in realtà piuttosto complicato quando si scrive anche il codice chiamante, poiché si comprendono i dettagli di implementazione su entrambi i lati. Tuttavia, cerca sempre e pensa a come puoi fornire al chiamante informazioni sufficienti per capire chiaramente se qualcosa ha sbagliato.

In questo caso è sufficiente lanciare Exception significherebbe che avrebbero dovuto analizzare il messaggio di errore per capire cosa hanno fatto male mentre gettando ArgumentException significa che possono più facilmente distinguere nella loro try/catch tra di loro dopo aver passato qualcosa non valida o di dover non è stato eseguito correttamente per qualche altro motivo.

1

Sono riluttante a usare termini come "cattiva pratica" perché quasi tutto è corretto in alcuni contesti. Ma di solito, sì, è considerato meglio lanciare il tipo più specifico di eccezione che esiste per la tua situazione, e se uno specifico non esiste devi definirne uno.

La ragione è che se si lanciano Exception, i chiamanti non possono distinguere tra l'errore che si sta generando e qualsiasi altra eccezione che può essere stata generata dal sistema durante la chiamata effettuata al codice.

In molti casi, il chiamante potrebbe decidere di gestire l'eccezione in modo diverso rispetto ad altri problemi, o almeno potrebbe registrare un messaggio specifico sapendo che si è verificata l'eccezione. Sarebbe difficile per il chiamante raggiungere se la tua eccezione non può essere facilmente distinta dagli altri.

Problemi correlati