0

これは、別の SO の質問と密接に関連しています。

List<Foo>以下の例を使用して、コンストラクターを介してリストに新しい Foo を追加するのに対し、Foo の各プロパティが明示的に設定されている場所に新しい Foo を追加すると、メソッドがデータを正しく格納する理由を誰かが説明してくれませんかApplicationSettingsBase.Save()(コンストラクターがプロパティ値を設定する場合) ) 動作しません?ありがとう!

public class Foo
{
    public Foo(string blah, string doh)
    {
        this.Blah = blah;
        this.Doh = doh;
    }

    public Foo() { }

    public string Blah { get; set; }
    public string Doh { get; set; }
}

public sealed class MySettings : ApplicationSettingsBase
{
    [UserScopedSetting]
    public List<Foo> MyFoos
    {
        get { return (List<Foo>)this["MyFoos"]; }
        set { this["MyFoos"] = value; }
    }
}

// Here's the question...
private void button1_Click(object sender, EventArgs e)
{
    MySettings mySettings = new MySettings();

    // Adding new Foo's to the list using this block of code doesn't work.
    List<Foo> theList = new List<Foo>()
    { 
        new Foo("doesn't","work")
    };

    // But using this block of code DOES work.
    List<Foo> theList = new List<Foo>()
    { 
        new Foo() {Blah = "DOES", Doh = "work"}
    };

   // NOTE: I never ran both the above code blocks simultaneously. I commented
   // one or the other out each time I ran the code so that `theList` was 
   // only created once.

    mySettings.MyFoos = theList;
    mySettings.Save();
}
4

2 に答える 2

0

今、質問を明確にしようとしているときに、答えに出くわしました。Foo クラスにデフォルトのコンストラクターを指定すると、次のようになります。

public Foo() { }

-- 他のすべてを同じままにします -- を実行すると、クラスの値が user.config ファイルに正しく保存されますApplicationSettingsBase.Save()。変。

于 2010-05-05T19:08:19.580 に答える
0

これは、サンプルの作成方法が原因である可能性があります。ただし、指定されたコードを使用すると、「機能する」セクションを実行すると、「機能しない」リストが削除されます。メソッドの最後に両方の要素を入れたい場合は、1 つの呼び出しtheListしかできません。new List<Foo>()

于 2010-05-05T18:01:31.110 に答える