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 に答える