2010-07-09 19 views
13

Tôi có một lớp mà FileHelpers phụ thuộc vào thứ tự trường trong tệp lớp này. Nếu tập tin lớp bao giờ nhận được một mã làm sạch chạy chống lại nó mà sẽ gây ra các lĩnh vực được sắp xếp theo thứ tự abc và vô hình hủy hoại lớp học của tôi.Có chỉ thị nhận xét lại để tắt tính năng dọn dẹp mã cho một lớp không?

Vì tôi muốn tránh điều này xảy ra khi vô tình xảy ra, có chỉ thị nhận xét lại để tắt tính năng dọn mã cho lớp không?

Trả lời

11

Bạn có thể tùy chỉnh tệp XML bố cục thành viên mặc định và chỉ định mẫu bạn muốn bỏ qua trong bước "sắp xếp lại thành viên" của quá trình dọn sạch mã.

Hãy xem phần Loại bố cục thành viên trong Cài đặt chia sẻ lại. Bạn có thể thấy rằng đã có hai trường hợp ngoại lệ được xác định cho các giao diện COM và Struct với StructLayoutAttribute:

<!--Do not reorder COM interfaces--> 
    <Pattern> 
    <Match> 
     <And Weight="100"> 
     <Kind Is="interface"/> 
     <HasAttribute 
      CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/> 
     </And> 
    </Match> 
    </Pattern> 

<!--Do not reorder when StructLayoutAttribute is set --> 
    <Pattern> 
    <Match> 
     <And Weight="100"> 
    <Or> 
     <Kind Is="struct"/> 
     <Kind Is="class"/> 
    </Or> 
     <HasAttribute 
      CLRName="System.Runtime.InteropServices.StructLayoutAttribute"/> 
     </And> 
    </Match> 
    </Pattern> 

Bạn có thể dễ dàng tạo của riêng bạn IgnoreTypeMemberReorderingAttribute và thêm một phần nhỏ trong file XML kiểm tra chống lại nó.

+1

Ngày nay nó được gọi là _File Layout_ và rất dễ tìm nếu bạn tìm kiếm trong Resharper Options. Đáng nói đến là các giao diện _COM hoặc structs_ được tìm thấy trên cùng một mức như _Default Pattern_, nếu bạn đã điều hướng khỏi _Patterns_. – wezzix

9

Tôi tin rằng Resharper quan sát thuộc tính [StructLayout (LayoutKind.Sequential)].

Cập nhật: Tôi nghĩ rằng điều này làm việc cho các lớp học tại thời điểm viết, nhưng trong các phiên bản hiện tại của Resharper (10), nó xuất hiện rằng nó chỉ áp dụng cho cấu trúc, không phải lớp học. Vì vậy, nó có lẽ vẫn còn hữu ích trong rất nhiều tình huống interop, nhưng không phải là một cách chung giữ theo thứ tự của bất kỳ lớp nào.

+0

Không hoạt động. Thử nghiệm với 10.0.2 – user764754

+0

@ user764754 - Dường như nó hoạt động với cấu trúc chứ không phải các lớp trong phiên bản Resharper hiện tại. Điều này có thể tuân theo ngữ nghĩa của 'StructLayoutAttribute' –

2

Một thuộc tính hữu ích để áp dụng cho các lĩnh vực của bạn là [FieldOrder(1)], vì vậy bạn explictly xác định thứ tự ... Tôi thích nó như là một just-in-trường hợp để bảo vệ chống lại các lĩnh vực bao giờ được tái ra lệnh

Không chắc chắn phiên bản nào của FileHelpers đã được đưa vào ... Tôi đang sử dụng phiên bản v2.9.9.0 được cài đặt bằng cách sử dụng NuGet

+0

Tôi đã kết thúc việc tạo toàn bộ siêu dự án cho FileHelpers, cho phép tôi ngừng quan tâm đến thứ tự các trường liên quan đến thứ tự các cột trong tệp csv. Nếu nó được mở nguồn, tôi sẽ theo dõi ở đây với nó. –

+1

FWIW cuối cùng chúng tôi đã từ bỏ việc sử dụng cầu FileHelper của mình và tại thời điểm này tôi sử dụng http://joshclose.github.io/CsvHelper/ bất kỳ lúc nào tôi cần CSV –

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