2009-09-28 4 views
17

Ich überprüfe einige Code.C#: Finden Sie alle leeren Catch-Blöcke

Ich habe einige leere Catch-Blöcke bemerkt. Keine gute Idee, da etwas nicht funktioniert und man nicht sehen kann warum.

Gibt es eine einfache Möglichkeit, alle leeren Try-Catch-Blöcke in einer Lösung zu finden?

EDIT

Danke für alle Antworten.

Verwendet das Beispiel von Stefan gegeben. Musste ein paar Variationen machen, gibt es viele Möglichkeiten, leere Catch-Blöcke zu schreiben. Auch eine einfache Suche nach catch (Exception) hat mehrere Fehler gefunden.

+0

Nur ein FYI - nicht alle leeren Catch-Blöcke sind schlecht. Manchmal fängt der Entwickler genau nach einer bestimmten Ausnahme, so dass die Ausnahme ignoriert werden kann. –

+0

@Matt, Danke, stimme zu, aber dann haben wir eine Regel, dass der Entwickler einen Kommentar abgeben muss, um zu bestätigen, dass es mit Absicht gemacht wurde. –

+0

@Matt - aber fangen (Ausnahme) ist fast immer schlecht. – TrueWill

Antwort

22

Verwenden globalen Suchen-Dialog verwenden, aktivieren Sie reguläre Ausdrücke und suchen Sie nach:

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

Danke, das ist ein echter Zeitsparer –

+0

FxCop oder ReSharper wäre für nur leerer Versuch übertrieben/fangen, gutes Denken! – jrummell

+2

Die obige Antwort funktionierte nicht für mich, aber das "catch (\ (. * Exception. * \)) *: Wh * \ {: Wh * \}" ohne die Anführungszeichen. – UnhandledExcepSean

5

Haben Sie ReSharper? Dies sollte die im Code gefundenen Probleme verbessern.

+0

Ich habe nicht gefunden, wo oder wie das in ReSharper ... wie würdest du es tun? – yeyeyerman

+0

Es erscheint als eine Warnung mit ReSharper, aber ich denke, Sie müssen die Code-Datei geöffnet haben, um es zu sehen. – jrummell

+0

Seltsamerweise habe ich neulich eines davon in einem Code gefunden.Wir benutzen sowohl FxCop als auch ReSharper; jemand hatte die FxCop-Warnung explizit unterdrückt (so dass es nicht auf dem Continuous Integration-Build angezeigt wurde) und den ReSharper ignoriert. Nicht viel kannst du dagegen tun. : P – TrueWill

7

FxCop wird sie zusammen mit vielen anderen möglichen Problemen finden.

+1

Können Sie die Regel benennen, die leere Catch-Blöcke abfängt? – slolife

2

Hier ist ein regulärer Ausdruck, die auch innerhalb von Blöcken mit nur Kommentare fangen findet:

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

Dank an Stefan für den Regex-Vorschlag. Ich fand, dass die vorgeschlagene regex nicht catch-Blöcke nicht findet, wo die Ausnahme nicht angegeben ist, das heißt:

catch { } 

ich gezwickt Stefans leicht optional die Ausnahme Klammer zu machen:

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

weiter ausgebaut die drei Lösungen vorstehenden Klauseln enthalten, wo die geschweiften Klammern nicht auf der gleichen Linie wie der Fang sind und wo die Klausel Fang nur einzelne Zeile enthält zitiert:

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

+1 Danke und willkommen zu stackoverflow –

1

Drücken Sie Strg + Umschalt + F. Erweitern Suchoptionen. Aktivieren Sie Reguläre Ausdrücke Fügen Sie diesen Regex ein.

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

Ich fügte die Details hinzu, um zu antworten. – bobah75