12

我今天遇到了这个问题,并且能够确定,在进行代码清理时,R# 不会将属性从具有支持字段的属性转换为用 SerializableAttribute 修饰的类中的自动属性,例如

using System; 

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

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

上述代码在自动代码清理期间不会更改。当然,我可以手动执行此操作,并且我仍然可以从 R# 中获得快速操作菜单选项来在单个属性级别执行此操作。但这让我想知道在类中使用自动属性时是否存在我不知道的潜在问题[Serializable]

JetBrains 论坛主题中,我们提到了一个问题,其中讨论了这个问题,但似乎没有得到最终解决。

4

1 回答 1

13

当您序列化对象时,字段名称等开始变得重要,因为大多数序列化机制使用字段名称来恢复序列化数据。现在,当您更改字段名称时,您将无法正确读取旧的序列化版本。

当您转换为自动属性时,支持字段将具有自动生成的名称,该名称与旧名称不匹配。因此,这会在读取旧的序列化数据时引入潜在问题。

我假设为了避免这个陷阱,如果类被标记为可序列化,R# 不会自动将其更改为自动属性。

于 2010-08-12T19:15:41.180 回答