Я храню коллекции пользовательских настроек в объекте Properties.Settings.Default
и использую конструктор настроек Visual Studio (щелкните правой кнопкой мыши свой проект, выберите «Свойства», а затем перейдите на вкладку «Настройки»), чтобы настроить его. Недавно несколько пользователей пожаловались на то, что данные, которые отслеживает этот конкретный параметр, случайно отсутствуют.
Чтобы дать представление (не совсем то, как я это делаю, но несколько близко), как это работает, у меня есть объект, например так:
class MyObject
{
public static string Property1 { get; set; }
public static string Property2 { get; set; }
public static string Property3 { get; set; }
public static string Property4 { get; set; }
}
Тогда в коде я мог бы сделать что-то подобное, чтобы сохранить информацию:
public void SaveInfo()
{
ArrayList userSetting = new ArrayList();
foreach (Something s in SomeCollectionHere) // For example, a ListView contains the info
{
MyObject o = new MyObject {
Property1 = s.P1;
Property2 = s.P2;
Property3 = s.P3;
Property4 = s.P4;
};
userSetting.Add(o);
}
Properties.Settings.Default.SettingName = userSetting;
}
Теперь код для его извлечения выглядит примерно так:
public void RestoreInfo()
{
ArrayList setting = Properties.Settings.Default.SettingName;
foreach (object o in setting)
{
MyObject data = (MyObject)o;
// Do something with the data, like load it in a ListView
}
}
Я также удостоверился, что украсил файл Settings.Designer.cs с помощью [global::System.Configuration.SettingsSerializeAs(global::System.Configuration.SettingsSerializeAs.Binary)]
, например так:
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SettingsSerializeAs(global::System.Configuration.SettingsSerializeAs.Binary)]
public global::System.Collections.ArrayList SettingName
{
get {
return ((global::System.Collections.ArrayList)(this["SettingName"]));
}
set {
this["SettingName"] = value;
}
}
Теперь случайным образом информация исчезнет. Я могу отладить это и увидеть, что Properties.Settings.Default
возвращает пустой ArrayList
для SettingName
. Я действительно не хотел бы использовать ArrayList, но я не вижу способа получить универсальную коллекцию для хранения таким способом.
Я собираюсь сдаться и сохранить эту информацию, используя простой XML самостоятельно. Я просто хотел убедиться, что я действительно слишком далеко продвигался к этой части .NET-инфраструктуры. Я прав?