2008-11-14 33 views
16

Các tiêu chuẩn mã hóa của chúng tôi yêu cầu chúng tôi giảm thiểu việc sử dụng C# var (gợi ý rằng việc sử dụng nó là kết hợp với LINQ). Tuy nhiên có những lúc khi sử dụng Generics, nơi nó thuận tiện hợp lý ví dụ:Công cụ để cấu trúc lại C# var thành loại rõ ràng

Dictionary<DateTime, Dictionary<string, float>> allValues = ... 
// ... 
foreach (var dateEntry in allValue) 

là dễ dàng hơn để gõ

foreach (KeyValue<DateTime, Dictionary<string, float>> dateEntry in allValue) 

(và dễ dàng hơn ghi nhớ những gì loại rõ ràng là trong một số trường hợp).

Bất kỳ công cụ tái cấu trúc nào đều có khả năng chuyển đổi công cụ cũ sang công cụ sau. Tôi đã có một cái nhìn tại Resharper nhưng nó dường như không làm (thực sự nó là gợi ý mặc định là để đi theo hướng ngược lại).

Trả lời

19

Tôi có ReSharper 4.1 và nó cung cấp tùy chọn này (theo một trong hai hướng).

Thực ra, tôi khuyên bạn nên thử thách tiêu chuẩn ... trước đây dễ đọc hơn so với sau (đặc biệt nếu bạn gọi biến số pair hoặc một cái gì đó tương tự). Tôi sẽ không sử dụng "var" cho var i = 0, nhưng nó là lý tưởng phù hợp với ở trên.

Đối với thay đổi số lượng lớn, hãy vào:

  • Cleanup Mã ... (chọn một hồ sơ cá nhân => "Edit Profiles" => Tools => Mã Cleanup)
    • C#
      • Sử dụng 'var' trong khai báo
        • Thay thế hướng = Có thể 'var' để nhập sử dụng
        • .210 phong cách
        • 'foreach' khai iterator = Luôn luôn sử dụng loại rõ ràng
        • Local phong cách khai báo biến = Luôn luôn sử dụng loại rõ ràng

và chạy ...

+0

đẹp bạn thấy làm thế nào để làm điều đó với số lượng lớn :) 1 – Bluenuance

+0

Cảm ơn, tôi mới để Resharper và đã không tìm thấy nó. –

4

Resharper thực hiện điều này (chỉ trong phiên bản 4+ tôi chắc chắn) nhưng tôi không biết nếu nó có thể chuyển đổi đơn giản var thành loại cụ thể tự động - cuối cùng bạn cần phải đi đến "var" và sau đó một ánh sáng hiển thị cho bạn tùy chọn chỉ định loại rõ ràng

0

Tôi muốn lập luận rằng, nơi bạn có kiểu generic phức tạp trên các đối tượng miền của bạn, bạn nên typedef họ

 
class DomainValueCollection : KeyValue<DateTime, Dictionary<string, float>>{} 

nơi DomainValueCollection là somehting có ý nghĩa trong bối cảnh miền của bạn

mã sau đó trở thành

 
var allItems = new DomainValueCollection(); 

thay vì

 
var allItems = new KeyValue<DateTime, Dictionary<string, float>>(); 
+0

Không chắc chắn sẽ hoạt động; xem bài đăng thứ hai của tôi vì lý do tại sao (quá dài để phù hợp với nhận xét một cách hợp lý) –

3

@Adam - bạn không thể khai báo một lớp ở đây, vì đó sẽ không có gì trở lại từ một IDictionary<,>.GetEnumerator() - tuy nhiên, bạn có thể bí danh qua using:

using InnerPair = System.Collections.Generic.KeyValuePair<System.DateTime, 
    System.Collections.Generic.Dictionary<string, float>>; 

Sau đó:

Đây chỉ là bí danh loại, vì vậy hoạt động tốt.

+0

GÌ? tại sao làm tất cả điều đó khi bạn chỉ có thể "var" ...? Tôi không hiểu? –

+2

@Bạn muốn khớp với các yêu cầu về câu hỏi ... –

2

Có thể là rất muộn, nhưng tôi đã viết một Visual Studio 2015 mở rộng mà không dựa trên nền tảng .NET Compiler. Replace var with Type Nó được kiểm tra cho các tình huống bình thường và nếu có lỗi, tôi sẽ sửa chữa nó sớm nhất và cũng là nguồn mở của nó trong trường hợp ai đó muốn đóng góp hoặc tăng cường công cụ này.

8

Điều này có thể trong Visual Studio 2017.

Tools> Options> Text Editor> C#> Mã Phong cách> General -

Find 'var' sở thích> Khi loại biến là rõ ràng. Đối với Tùy chọn, hãy chọn "Ưu tiên loại khiêu dâm" và chọn Mức độ nghiêm trọng "Đề xuất".

enter image description here

Bây giờ bạn sẽ có được những hành động bóng đèn khi bạn sử dụng var, và bạn có thể nhanh chóng chuyển sang kiểu tường minh bằng công Ctrl. phím tắt.

enter image description here

enter image description here

+0

Bằng cách nào đó cách này không hiệu quả đối với tôi sau khi thay đổi cài đặt được đề xuất? Lựa chọn duy nhất tôi có trong bóng đèn là 'Phương pháp chiết xuất'? Tôi đang sử dụng Visual Studio 2017 CE ... Có tùy chọn nào khác cần thiết để làm việc này không? –

+1

Tôi không chắc chắn về phiên bản cộng đồng, nhưng tôi không mong đợi nó sẽ khác. Hãy thử đặt mức độ nghiêm trọng thành cảnh báo hoặc ngoại lệ và xem liệu nó có hiển thị trong Danh sách lỗi của bạn hay không. Có lẽ cũng thử khởi động lại VS? – HaveSpacesuit

+0

Thay đổi mức độ nghiêm trọng đối với Cảnh báo hoặc Lỗi không hoạt động, Cảm ơn mẹo! –

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