列表<myclass>未保存在settings.settings

时间:2016-02-04 12:07:51

标签: c# settings.settings

我正在尝试将List<T>保存到项目的设置文件中。

我已经编辑了settings.settings文件并添加了

<Setting Name="CustomTabs" Type="System.Collections.Generic.List&lt;CustomTabItem&gt;" Scope="User">
      <Value Profile="(Default)" />
</Setting>

并编辑了settings.designer.cs

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public global::System.Collections.Generic.List<CustomTabItem> CustomTabs {
    get {
        return ((global::System.Collections.Generic.List<CustomTabItem>)(this["CustomTabs"]));
    }
    set {
        this["CustomTabs"] = value;
    }
}

所以Listtype在settings-gui中可用。

现在,如果我Properties.Settings.Default.CustomTabs.Add(tab);列表被填充,但是如果我调用Save();并重新启动应用程序,则列表将再次为空。

我错过了一些让它起作用的东西吗?我正在使用Visual Studio 2015。

1 个答案:

答案 0 :(得分:0)

您不必更改settings.settings文件

尝试删除设置

<Setting Name="CustomTabs" Type="System.Collections.Generic.List&lt;CustomTabItem&gt;" Scope="User">
      <Value Profile="(Default)" />
</Setting>
来自settings.settings文件的

另外,请记住回读存储的&#34; CustomTabs&#34;应用程序启动期间的设置值。

编辑:2 即使settings.settings文件改变如下,也没有坏处:

<Setting Name="myTestDataList" Type="System.Collections.Generic.List&lt;TestData&gt;" Scope="User">
      <Value Profile="(Default)" />
    </Setting>

示例应用程序仍然能够在下次启动应用程序时检索以前的数据。

编辑: 我做了一个示例应用程序:

在settings.Designer.cs中手动添加以下设置

[global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("")]
        public System.Collections.Generic.List<TestData> myTestDataList
        {
            get
            {
                return ((System.Collections.Generic.List<TestData>)(this["myTestDataList"]));
            }
            set
            {
                this["myTestDataList"] = value;
            }
        }

我的数据类

public class TestData
    {
        public string A {get; set;}
        public string B { get; set; }
    }

button-1:存储数据

private void button1_Click(object sender, EventArgs e)
        {
            List<TestData> myList = new List<TestData>();
            myList.Add(new TestData() { A = "Str1", B = "Str2" });
            myList.Add(new TestData() { A = "Str3", B = "Str4" });

            Properties.Settings.Default["myTestDataList"] = myList;
            Properties.Settings.Default.Save();
        }

button-2:即使在下次运行应用程序时也会检索数据

private void button2_Click(object sender, EventArgs e)
{
    List<TestData> myList = Properties.Settings.Default["myTestDataList"] as List<TestData>;
}