Почему добавление пользовательских объектов в List<T> в ApplicationSettingsBase через конструктор не работает?
Это довольно тесно связано с другим вопросом SO.
Используя приведенный ниже пример, кто-то может объяснить мне, почему добавление нового List<Foo>
где каждое из свойств Foo явно установлено, вызывает ApplicationSettingsBase.Save()
метод для правильного хранения данных, тогда как добавление нового Foo в список через конструктор (где конструктор устанавливает значения свойств) не работает? Спасибо!
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();
}
2 ответа
Я наткнулся на ответ, пытаясь прояснить свой вопрос только сейчас. Если я предоставлю конструктор по умолчанию для класса Foo:
public Foo() { }
- оставляя все остальное таким же - тогда значения класса правильно сохраняются в файле user.config, когда ApplicationSettingsBase.Save()
выполнен. Weird.
Это может быть связано с тем, как вы построили свой пример. Но, используя данный код, список "не работает" удаляется, когда вы выполняете раздел "работает". Если вы хотите, чтобы оба элемента были в theList
в конце метода вы можете иметь только один new List<Foo>()
вызов.