2009-09-28 29 views
17

Tôi đang xem xét một số mã.C#: Tìm tất cả các khối catch trống

Tôi đã nhận thấy một số khối bắt trống. Không phải là một ý tưởng tốt kể từ khi somethings không làm việc và bạn không thể nhìn thấy lý do tại sao.

Có cách nào dễ dàng để tìm tất cả các khối try try trống trong một giải pháp?

EDIT

Cảm ơn tất cả các câu trả lời.

Sử dụng ví dụ do Stefan đưa ra. Đã phải làm một vài biến thể, có nhiều cách để viết các khối catch rỗng. Ngoài ra một tìm kiếm đơn giản cho bắt (ngoại lệ) tìm thấy một số lỗi.

+0

Chỉ cần một FYI - không phải tất cả các khối bắt trống đều không hợp lệ. Đôi khi, nhà phát triển đang tìm kiếm một ngoại lệ cụ thể một cách chính xác để ngoại lệ có thể bị bỏ qua. –

+0

@Matt, Cảm ơn, đồng ý với bạn, nhưng sau đó chúng tôi có một quy tắc mà nhà phát triển phải đặt nhận xét để xác nhận rằng nó được thực hiện với mục đích. –

+0

@Matt - nhưng bắt (Ngoại lệ) hầu như luôn luôn là xấu. – TrueWill

Trả lời

22

Sử dụng sử dụng hộp thoại tìm toàn cầu, bật biểu thức thông thường và sau đó tìm kiếm:

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

Cảm ơn, đó là một tiết kiệm thời gian thực –

+0

FxCop hoặc ReSharper sẽ là quá mức cần thiết cho chỉ cần thử sản phẩm nào/bắt, suy nghĩ tốt! – jrummell

+2

Câu trả lời ở trên không hiệu quả đối với tôi, nhưng điều này đã "bắt (\ (. * Ngoại lệ. * \)) *: Wh * \ {: Wh * \}" không có dấu ngoặc kép. – UnhandledExcepSean

5

Bạn có ReSharper không? Điều này sẽ làm mờ các vấn đề được tìm thấy trong mã.

+0

Tôi đã không tìm thấy ở đâu hoặc làm thế nào để điều này trong ReSharper ... làm thế nào bạn sẽ làm điều đó? – yeyeyerman

+0

Nó hiển thị như một cảnh báo với ReSharper, nhưng tôi nghĩ bạn phải mở tập tin mã để xem nó. – jrummell

+0

Thật kỳ lạ, tôi tìm thấy một trong số này trong một số mã vào ngày khác.Chúng tôi sử dụng cả FxCop và ReSharper; một người nào đó đã ngăn chặn một cách rõ ràng cảnh báo FxCop (vì vậy nó không hiển thị trên Continuous Integration build) và bỏ qua một ReSharper. Không có nhiều bạn có thể làm về điều đó. : P – TrueWill

7

FxCop sẽ tìm thấy chúng cùng với nhiều vấn đề tiềm ẩn khác.

+1

Bạn có thể đặt tên cho quy tắc bắt khối ô trống không? – slolife

2

Đây là một biểu hiện thường xuyên mà cũng thấy bắt khối chỉ với ý kiến ​​bên trong:

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

Cảm ơn tới Stefan cho đề xuất của Regex. Tôi thấy rằng regex đề nghị không tìm thấy khối catch nơi ngoại lệ không được xác định, ví dụ:

catch { } 

tôi chỉnh Stefan hơi để làm cho cú đúp ngoại lệ tùy chọn:

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

Tiếp tục mở rộng ba giải pháp ở trên để bao gồm các mệnh đề trong đó các dấu ngoặc nhọn không nằm trên cùng một dòng với đoạn bắt và nơi mệnh đề catch chỉ chứa các dấu ngoặc đơn đơn:

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

+1 Cảm ơn và chào mừng bạn đến với stackoverflow –

1

Nhấn Ctrl + Shift + F. Mở rộng Tìm tùy chọn. Kiểm tra Sử dụng Cụm từ Thông dụng Dán regex này.

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

Tôi đã thêm chi tiết để trả lời. – bobah75

Các vấn đề liên quan