2009-08-19 33 views
6

Tôi chỉ cần cài đặt Reshaper 4.5 và nó đã đưa ra những gợi ý sau đây:Resharper có chính xác không?

return this.GetRuleViolations().Count() == 0; -- REMOVE this. 

new string[] { this.ID.ToString(), this.Registration } -- REMOVE string, MAKE ANONYMOUS TYPE 

int i = Method.GetNumber(); -- REPLACE int WITH var 

Tôi có nên làm những?

Tôi nghĩ rằng trong một số trường hợp, nó sẽ làm cho mã ít đọc được hơn nhưng nó sẽ cải thiện hiệu suất? những lợi ích của việc thực hiện những thay đổi này là gì?

Cảm ơn

+1

Chỉ có một bài hát Rigobert. Hãy chắc chắn kiểm tra các lần xuất hiện khác nhau của các câu hỏi con của điều này trên diễn đàn này. –

+1

Hãy thử cài đặt StyleCop và StyleCop-for-ReSharper sẽ cung cấp cho bạn các hướng dẫn kiểu mã được khuyến nghị của Microsoft. Bạn sẽ cần phải tinh chỉnh các quy tắc của R # để phù hợp. Đối với việc sử dụng var, chúng tôi luôn luôn sử dụng nó trong nội bộ vì nó giúp dễ đọc theo ý kiến ​​của chúng tôi - các loại dành cho trình biên dịch chứ không phải con người. –

+1

Hm. Tôi luôn sử dụng loại hình này - tôi đoán tôi cảm thấy như bạn nên biết những gì bạn đang nhận được từ các biểu thức lambda của bạn, và nó sẽ giúp ích một chút nếu bạn chỉ định nó hoàn toàn. – Yablargo

Trả lời

12

1) Các rõ ràng this con trỏ là chỉ cần thiết khi tham chiếu sẽ nếu không thì không rõ ràng. Vì GetRuleViolations được xác định trên loại, bạn rất có thể không cần this.

Một điểm khác ở đây là nếu GetRuleViolations trả lại một IEnumerable của một cái gì đó, bạn thường sẽ tốt hơn hết bằng cách sử dụng Any() thay vì Count() == 0 khi bạn có nguy cơ liệt kê toàn bộ chuỗi.

2) Chuỗi có thể được suy ra từ khởi tạo.

3) Resharper thích var trên các loại cụ thể.

+0

+1 - Mẹo hay để sử dụng Any() nhờ –

0

Đầu tiên một: Resharper được hỏi về loại bỏ this mà chỉ là một điều phong cách với tôi. Không có gì nhiều hơn, giữ nó sẽ không làm hại hiệu suất trong bất kỳ cách nào. Nó chỉ là vấn đề dễ đọc.

Thứ hai và thứ ba: Chia sẻ lại thường thích sử dụng var thay vì loại dữ liệu cụ thể, đó là lý do tại sao đề xuất. Tôi tin rằng đó là vấn đề lựa chọn cá nhân và không mang lại thêm lợi ích nào khác ngoài khả năng đọc.

0

Điều đầu tiên dường như không rõ ràng đối với tôi. Bạn thường không cần phải tiền tố this. miễn là không có sự mơ hồ, mà tôi không thể nói từ ví dụ này. Resharper có lẽ là đúng. Hai cái còn lại sẽ không cải thiện hiệu suất, kết quả được biên dịch sẽ giống nhau. Nó chỉ là một vấn đề của hương vị và, tất nhiên, hướng dẫn mã hóa của bạn.

0

Đầu tiên phải được định cấu hình. Theo như tôi nhớ, bạn có thể nói ReSharper cho dù bạn muốn có "này". trước các trường, phương thức, cả hai hoặc không có.

Sử dụng "var" sẽ không thay đổi bất kỳ điều gì trong mã CIL được tạo, do đó hiệu suất sẽ giữ nguyên. Tôi đã không sử dụng ReSharper một thời gian và tôi không biết tại sao nó khuyến khích các loại vô danh mạnh mẽ như vậy, nhưng một lợi thế của "var" là nó có nhiều khả năng chống thay đổi.

Có nghĩa là, thay vì gọi phương thức Method.GetNumber(), bạn gọi là trình bao bọc, ví dụ: Bộ lọc (Method.GetNumber()) trong cùng một dòng trả về một Nullable, bạn sẽ không phải cập nhật kiểu của biến.

1

Tôi nghĩ mục đầu tiên là cho mục đích, nếu bạn muốn làm cho "GetRuleViolations()" là một phương pháp tĩnh. Sau đó, bạn không phải loại bỏ định danh "này".

2

Đối với phiên bản thứ 3 - thứ khiến tôi khó chịu nhất. Nó cung cấp cho người đọc ít thông tin hơn và tôi nghĩ đó chỉ là vấn đề thể hiện một tính năng mới mẻ.

Tôi muốn nói - sử dụng var khi bạn biết kiểu trả về và sử dụng các loại đối tượng chính xác khi bạn không thích điều này:

var reader = new XmlReader(.... // Implicit 
XmlReader reader = SomeClass.GetReader() // Explicit when you can't be sure 
3

Ngoài lợi ích rõ ràng của hình vuông nhỏ màu xanh lá cây của bạn, nếu bạn đang viết mã sẽ được duy trì bởi người khác sau đó, bạn nên sử dụng tùy chọn cá nhân của mình theo cú pháp mã hóa. Tính năng chia sẻ lại đang trở nên hữu ích trong việc định dạng mã theo cách dễ nhận biết đối với một đối tượng rất rộng.

Tôi thuộc trường phái tư tưởng cho biết không quan trọng ai là đúng. Nếu tất cả chúng ta dính vào một khuôn mẫu, tất cả chúng ta sẽ thấy dễ dàng hơn khi đọc mã của nhau.

Vì vậy, theo quan điểm khiêm tốn của tôi, không thay đổi cài đặt chia sẻ lại mặc định. Chỉ chấp nhận rằng nếu bạn sử dụng mặc định, bạn làm cho cuộc sống trở nên đơn giản cho mọi người.

+1

Tôi đồng ý với bạn về việc sử dụng các công cụ mặc định. Thật không may từ những gì tôi đã nhìn thấy, tôi không thích mặc định của Resharper –

+1

Tôi sẽ luôn luôn thay đổi 'var' thiết lập của resharper để loại rõ ràng vì AN NINH. Có thể đọc được là tốt, nhưng nó có thể làm tổn thương nghiêm trọng sau khi một người nào đó tái cấu trúc. – Offler

0

Không có điều nào trong số này sẽ ảnh hưởng đến hiệu suất, chỉ về khả năng đọc.

Tôi tìm các đề xuất 1 và 2 để dễ đọc hơn và 3 ít có thể đọc hơn mã ban đầu của bạn.

Nhưng bạn không cần phải thực hiện theo các đề xuất này nếu, ví dụ: bạn thấy chúng ít dễ đọc hơn hoặc nếu chúng vi phạm tiêu chuẩn kiểu mã của công ty bạn. Khi bạn đặt con trỏ trên dòng nguệch ngoạc, nhấn Alt-Enter để hiển thị danh sách Tác vụ Contex. Một trong số họ sẽ thay đổi mức độ nghiêm trọng của việc kiểm tra; bạn không thể hiển thị nó ở tất cả hoặc hiển thị nó như là một gợi ý. Bạn có thể tìm thấy danh sách kiểm tra đầy đủ tại ReSharper | Tùy chọn | Kiểm tra mã | Kiểm tra mức độ nghiêm trọng.

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