2012-08-01 18 views
18

Tôi đã có yêu cầu xem xét tính khả thi của việc thay thế tất cả chuỗi sử dụng toán tử == trong một mật độ C# lớn với các cuộc gọi phương thức String.Equals(). .Tìm tập quán của toán tử string == trong một codebase lớn

Không có nhiều may mắn tìm ra cách để xác định tất cả các lần xuất hiện trong codebase.

  • Tìm kiếm "==" rõ ràng tìm thấy vô số trường hợp các loại ngoài chuỗi được so sánh.
  • Dường như quy tắc StyleCop không tìm thấy điều này.
  • Cũng không phải là quy tắc ReSharper.
  • Như một phương sách cuối cùng tôi đã cố gắng tải các hội đồng thành JustDecompile và tìm tất cả các tập quán của System.String.op_Equality nhưng điều đó dường như không nhấc tập quán bên trong các biểu thức LINQ như .Where(x => x.StringField == stringField)

Vì vậy, tôi là một chút bối rối và tự hỏi liệu có ai có ý tưởng nào về cách tìm kiếm những so sánh này không?

+4

Tôi rất muốn nghe lý do bạn được yêu cầu xem xét một điều như vậy. Điều đó có vẻ giống như việc sử dụng thời gian không hiệu quả của bạn ..... Đây có phải là "sự tuân thủ tài liệu tiêu chuẩn" không? –

+0

Tại sao 'tìm kiếm" == "tìm thấy vô số trường hợp các loại khác với chuỗi được so sánh'? Các 'loại' khác là gì? –

+0

@NikhilAgrawal Nếu chúng là các biến chuỗi và không phải là chuỗi ký tự thì sao? –

Trả lời

11

Bạn có thể sử dụng Resharper để tìm tất cả các tập quán. Dưới đây là những gì phù hợp với tôi:

  1. Nhấp chuột phải vào loại chuỗi ở bất kỳ đâu trong mã của bạn. Nhấp vào Chuyển đến Tuyên bố.
  2. Resharper sẽ mở string.cs từ khuôn khổ NET
  3. Cuộn xuống operator == và click chuột phải, chọn Tìm Usages

Phải mất một chút thời gian nhưng bạn sẽ nhận được một danh sách tốt đẹp của tập quán, ra lệnh trong một cái nhìn cây. Tôi đã thử với Resharper 6.1 trong VS2010.

CẬP NHẬT

Có một cách đơn giản hơn để làm điều này:

  1. Chọn == trong một so sánh chuỗi
  2. Nhấp chuột phải vào vùng chọn và chọn Tìm Usages nâng cao
  3. Trong hộp thoại bên dưới, hãy tìm kiểm tra 'Sử dụng' và đặt phạm vi thành 'Giải pháp' để lọc ra bất kỳ tham chiếu nào trong các thư mục khác.
+0

Rất đẹp. Beats câu trả lời của tôi và đấm :) – davenewza

+0

Gợi ý tốt. Tuy nhiên, khi tôi thử điều này trong VS2012RC và R # 7, và nhấn chuột phải vào tùy chọn 'operator ==' _Find Usages_ bị vô hiệu hóa. Trên thực tế, _Find Usages_ dường như bị tắt cho tất cả các phương thức trong tệp siêu dữ liệu _String.cs_. Tôi có làm điều gì sai? –

+0

Cảm ơn lời khuyên nhưng tôi không thể làm điều này. "Tìm tập quán" (giả sử đó là ý của bạn, tôi không có mục "Hiển thị tập quán") quét qua tất cả các tệp mã trong giải pháp của tôi, nhưng trong kết quả của nó, nó chỉ mang lại cho tôi 1432 tập quán trong thư viện tham chiếu, về cơ bản đã trải qua toàn bộ không gian tên 'System.'. Không có gì từ mã của tôi. – Carson63000

0

Lời khuyên của tôi là viết một trình phân tích cú pháp mã rất cơ bản và cụ thể xuyên qua từng phạm vi trong hệ thống của bạn, ghi lại tất cả các tờ khai biến string/String và phát hiện bất kỳ sự so sánh nào.

Bất kỳ ai có kiến ​​thức sâu hơn về phân tích cú pháp mã đều được hoan nghênh nhận xét. Tôi chắc rằng có một số lớp/công cụ ngoài kia mà người ta có thể sử dụng.

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