2010-08-12 30 views
10

Tôi đã gặp vấn đề này ngày hôm nay và có thể xác định rằng, khi thực hiện dọn dẹp mã, R # sẽ không chuyển đổi thuộc tính từ việc sao lưu các trường thành thuộc tính tự động trong các lớp được trang trí bằng SerializableAttribute, ví dụ:Resharper không tự động chuyển đổi thành thuộc tính tự động trong các lớp Serializable - phải không?

using System; 

namespace DataContracts 
{ 
    [Serializable] 
    public class Class1 
    { 
     private bool _wontChange; 

     public bool WontChange 
     { 
      get { return _wontChange; } 
      set { _wontChange = value; } 
     } 
    } 
} 

Mã trên sẽ không bị thay đổi trong quá trình dọn dẹp mã tự động. Tất nhiên, tôi có thể làm điều này bằng tay, và tôi vẫn nhận được tùy chọn menu hành động nhanh từ R # để làm điều đó ở cấp thuộc tính cá nhân. Nhưng nó đã cho tôi tự hỏi nếu có một vấn đề cơ bản mà tôi không nhận thức được trong việc sử dụng các thuộc tính tự động trong các lớp học [Serializable].

Trong số JetBrains forum thread chúng tôi được gọi là an issue trong đó vấn đề này được thảo luận, nhưng dường như nó không được giải quyết dứt khoát.

+0

Bạn nói rằng bạn có thể sử dụng "menu hành động nhanh" để thực hiện công việc. Tùy chọn này không có ở đó. Và khi tôi loại bỏ thuộc tính serializable, mọi thứ đều ổn. – Samuel

Trả lời

11

Khi bạn tuần tự hóa các đối tượng, tên trường vv bắt đầu thành vấn đề, vì hầu hết cơ chế tuần tự hóa sử dụng tên trường để khôi phục dữ liệu tuần tự. Bây giờ khi bạn thay đổi tên trường, bạn không thể đọc chính xác các phiên bản cũ hơn.

Khi bạn chuyển đổi thành thuộc tính tự động, trường sao lưu sẽ có tên được tạo tự động, không khớp với tên cũ. Do đó điều này sẽ giới thiệu một vấn đề tiềm năng khi đọc dữ liệu tuần tự cũ.

Tôi giả định để tránh sự cố này, R # không tự động thay đổi thành thuộc tính tự động nếu lớp được đánh dấu là có thể tuần tự hóa.

+0

Tôi cho rằng đây không phải là vấn đề với các đối tượng đã được tuần tự hóa và deserialized từ cùng một DLL - các trường sao lưu sẽ được định nghĩa tĩnh trong DLL. Đó có phải là một giả định hợp lệ không? – arootbeer

+1

Tôi chưa bao giờ gặp sự cố này được mô tả bằng thuộc tính tự động và tuần tự hóa. Tôi đã đọc R # lỗi https://youtrack.jetbrains.com/issue/RSRP-63531 trong đó và SO này không có bằng chứng được cung cấp cho thấy điều này trong hành động? Dự án tái sản xuất ở đâu? Đây có phải là một vấn đề trở lại trong CLR1 và CLR2 ngày được nó cố định trong một cập nhật CLR 2 sau hoặc trong CLR 4? –

+0

Cảm ơn bạn rất nhiều. Nó sẽ là tốt đẹp để có loại chức năng tài liệu trên trang web của họ. – Samuel

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