8

So che Java impone al programmatore di elencare tutte le eccezioni che verranno generate dal metodo, creando così un modo semplice di elencare tutte le possibili eccezioni generate per l'utente del codice.Elenca tutte le eccezioni che potrebbero essere generate da un metodo

.NET, d'altra parte, non dispone di tale funzionalità e tutto ciò che ci rimane è la documentazione dell'API o la documentazione XML in cui le eccezioni sono talvolta elencate.

Esiste un addon per VS che mostra quali eccezioni possono essere generate da una chiamata? Dato il potere della riflessione, non dovrebbe essere possibile guardare attraverso la chiamata, e guardare attraverso tutti i rami di possibili esecuzioni attraverso la chiamata e verificare la presenza di eventuali eccezioni .NET?

+0

E, se si scopre che genera 3 diverse eccezioni per analisi del codice sorgente, come si inseriscono le clausole di cattura nel codice per ciascuna di esse? – shahkalpesh

+1

Neanche la maggior parte degli ingegneri Java ora ammette che le eccezioni controllate erano una pessima idea? –

+2

Penso che dovresti risolvere il problema dell'arresto per determinare ogni istanza in cui potrebbe essere generata una DivideByZeroException (a differenza di quelli in cui gli invarianti di classe impediscono che si verifichi) –

risposta

8

L'unico strumento che conosco è il (commerciale) Exception Hunter from red-gate software.

Tuttavia, non è così deterministico come si potrebbe pensare prima. A seconda delle versioni degli assembly aggiuntivi utilizzati, le eccezioni generate possono variare dopo il tempo di compilazione se viene utilizzata una versione più recente che genera altre eccezioni del previsto al momento della compilazione.

In Java, si dispone della RuntimeException "speciale" che non deve essere dichiarata nella firma del metodo (comprese tutte le eccezioni che discendono da esso). Esistono validi motivi per cui i progettisti linguistici hanno scelto di non implementare eccezioni controllate in C# (indipendentemente dal fatto che siano superiori ai vantaggi o meno). Alcuni sviluppatori Java racchiudono le eccezioni nelle eccezioni di runtime oppure dimenticano di utilizzare le eccezioni di "causa" che provocano la perdita di informazioni.

C'è un buon interview with Anders Hejlsberg sulle eccezioni controllate e alcuni ragionamenti sul motivo per cui C# non li ha - Grazie ad adrianbanks per il collegamento.

+2

C'è una buona intervista con Anders Hejlsberg sulle eccezioni controllate e alcuni dei ragionamenti sul motivo per cui C# non li ha qui: http://www.artima.com/intv/handcuffs.html – adrianbanks

+0

@adrianbank, lo so, ma non avevo il link a portata di mano. Grazie per averlo pubblicato! – Lucero

+0

Ottimo articolo, offre una buona prospettiva sulle esplorazioni controllate per quelli di noi che non li hanno mai realmente in uso pratico. –