2009-09-28 10 views
17

Sto rivedendo del codice.C#: trova tutti i blocchi di cattura vuoti

Ho notato alcuni blocchi vuoti. Non è una buona idea dal momento che qualcosa non funziona e non riesci a capire perché.

C'è un modo semplice per trovare tutti i blocchi di blocchi di prova vuoti in una soluzione?

EDIT

Grazie per tutte le risposte.

Utilizzato l'esempio fornito da Stefan. Dovevo fare alcune variazioni, ci sono molti modi di scrivere blocchi di cattura vuoti. Anche una semplice ricerca di catch (Exception) ha riscontrato diversi errori.

+0

Solo una FYI - non tutti i blocchi di catch vuoti sono cattivi. A volte, lo sviluppatore sta rilevando esattamente un'eccezione specifica in modo che l'eccezione possa essere ignorata. –

+0

@Matt, Grazie, sono d'accordo con te, ma poi abbiamo una regola che lo sviluppatore deve inserire un commento per confermare che è fatto con intento. –

+0

@Matt - ma catch (Exception) è quasi sempre negativo. – TrueWill

risposta

22

Usa utilizzare la finestra di ritrovamento globale, attivare le espressioni regolari e quindi cercare:

catch:b*\([^)]*\):b*\{:b*\} 
+0

Grazie, questo è un risparmio in tempo reale –

+0

FxCop o ReSharper sarebbe eccessivo per solo prova/cattura vuota, buon pensiero! – jrummell

+2

La risposta sopra non ha funzionato per me, ma questo ha fatto "catch (\ (. * Exception. * \)) *: Wh * \ {: Wh * \}" senza virgolette. – UnhandledExcepSean

5

Avete ReSharper? Questo dovrebbe mettere a fuoco i problemi riscontrati nel codice.

+0

Non ho trovato dove o come farlo in ReSharper ... come lo faresti? – yeyeyerman

+0

Si presenta come un avvertimento con ReSharper, ma penso che sia necessario avere il file di codice aperto per vederlo. – jrummell

+0

Stranamente, ho trovato uno di questi in qualche codice l'altro giorno.Utilizziamo sia FxCop che ReSharper; qualcuno ha esplicitamente soppresso l'avviso FxCop (quindi non si è mostrato nella build di Continuous Integration) e ha ignorato quello di ReSharper. Non c'è molto che tu possa fare al riguardo. : P – TrueWill

7

FxCop li troverà insieme a molti altri potenziali problemi.

+1

Puoi nominare la regola che cattura i blocchi di cattura vuoti? – slolife

2

Ecco un'espressione regolare che trova anche cattura blocchi con solo commenti all'interno:

catch:b*\([^)]*\)[:b\n]*\{([:b\n]|(\/\*[^*]*\*\/)|(//[^\n]*))*\} 
2

Grazie a Stefan per il suggerimento Regex. Ho trovato che il regex suggerito non trova blocchi catch in cui l'eccezione non viene specificato, vale a dire:

catch { } 

ho ottimizzato Stefan po 'per fare il tutore un'eccezione facoltativa:

catch:b*(\([^)]*\))*:b*\{:b*\} 
5

ulteriormente ampliato le tre soluzioni al di sopra di includere le clausole dove le parentesi graffe non sono sulla stessa linea del pescato e dove la clausola catch contiene solo singola linea cita:

catch:b*(\([^)]*\))*:b*[ \n\r\t]*\{:b*([ \n\r\t.]|(\/*[^]*\/)|(//.*$))*\} 
+1

+1 Grazie e benvenuti a StackOverflow –

1

Premere Ctrl + Maiusc + F. Espandi Trova opzioni. Verifica Usa espressioni regolari Incolla questa espressione regolare.

catch\s*(\(\s*Exception(\s*\w+)?\))?\s*\{\s*\} 
+1

Ho aggiunto i dettagli per rispondere. – bobah75

Problemi correlati