代码之家  ›  专栏  ›  技术社区  ›  Matt Mills

Resharper不会自动转换为可序列化类中的自动属性-我应该这样做吗?

  •  11
  • Matt Mills  · 技术社区  · 14 年前

    我今天遇到了这个问题,并且能够确定,在执行代码清理时,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 forum thread 有人提到我们 an issue 其中讨论了这个问题,但似乎没有得到最终解决。

    1 回复  |  直到 14 年前
        1
  •  13
  •   Gamlor    14 年前

    当序列化对象时,字段名等开始起作用,因为大多数序列化机制都使用字段名来还原序列化的数据。现在,当您更改字段名时,您无法正确读取较旧的序列化版本。

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

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