问题 为什么我的清单<string>保存在用户设置中是否不保存字符串?

SebGM2018

新成员
已加入
2018年6月16日
留言内容
4
编程经验
3-5
美好的一天,我有清单<string>保存在“我的应用程序用户设置”中,此列表应该保存openfile对话框的文件路径,然后反序列化它,但是我已经调用了方法Save();。甚至方法Upgrade();将字符串添加到列表后,但是此字符串不会保存。为什么?
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
I Have A List<string>保存在我的应用程序用户设置中

我不确定这是否有可能。您创建的设置的类型是什么?如果您认为这是列表<string>,您可以提供“设置”页面的屏幕截图来证明这一点吗?

如果不是列表<string>,您如何精确地从列表中保存数据<string> to the setting?
 

SebGM2018

新成员
已加入
2018年6月16日
留言内容
4
编程经验
3-5
是的

我不确定这是否有可能。您创建的设置的类型是什么?如果您认为这是列表<string>,您可以提供“设置”页面的屏幕截图来证明这一点吗?

如果不是列表<string>,您如何精确地从列表中保存数据<string> to the setting?

是的。可能,请检查屏幕快照,以完成此操作,我需要将settings.settings xml文件从System.String更改为System.Collection.Generic.List。
Captura de pantalla(27).pngCaptura de pantalla(28).png
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
我需要将settings.settings xml文件从System.String更改为System.Collection.Generic.List。

那可能就是问题所在。您是否不认为存在无法通过UI进行操作的原因?如果要保存字符串列表,则可以使用StringCollection。如果您特别需要列表<string>那么您可以在启动和关闭时简单地在两者之间来回复制数据。
 

SebGM2018

新成员
已加入
2018年6月16日
留言内容
4
编程经验
3-5
回复

那可能就是问题所在。您是否不认为存在无法通过UI进行操作的原因?如果要保存字符串列表,则可以使用StringCollection。如果您特别需要列表<string>那么您可以在启动和关闭时简单地在两者之间来回复制数据。

为什么要收集字符串?
如果我得到第二种选择,我该怎么办?
 

金西尼(Jmcilhinney)

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
泛型仅在2.0版中添加到.NET。在此之前,我们通常使用ArrayList来实现动态数组功能。虽然缺少用于项目的字符串输入,所以并不理想。因为字符串的集合非常普遍,所以1.0版中包含了System.Collections.Specialized.StringCollection类以提供字符串类型。由于Settings子系统中似乎不支持泛型,并且显式支持StringCollection,因此应使用该持久化String的集合。

如果确实使用StringCollection,则可以像调用任何其他集合一样使用它,调用Add和Remove等。如果您确实需要列表<string>那么您可以执行以下操作:
var myListOfString = new List<string>(Properties.Settings.Default.MyStringCollection);

或这个:
myListOfString.AddRange(Properties.Settings.Default.MyStringCollection);

在启动时,这:
Properties.Settings.Default.MyStringCollection.Clear();
Properties.Settings.Default.MyStringCollection.AddRange(myListOfString);

在关机时。

请注意,使用StringCollection捕获许多人时有一个陷阱。当您添加该类型的设置时,默认情况下它将为null。一种解决方法是在启动时执行此操作:
if (Properties.Settings.Default.MyStringCollection == null)
{
    Properties.Settings.Default.MyStringCollection = new StringCollection();
}

这将首次创建一个对象,然后该对象将在关闭时保存并在以后的场合加载。更好的选择是执行以下步骤:

1.单击设置的“值”字段。
2.单击(...)按钮编辑值。
3.添加任何虚拟值。
4.单击确定。

请注意,XML片段显示在“值”字段中,并且包含您的虚拟项目。

5.再次单击(...)按钮。
6.删除虚拟值。
7.单击确定。

请注意,XML片段仍然存在,但您的虚拟商品已消失。现在,该设置将在应用程序首次运行时包含一个空的StringCollection对象。
 
最佳 底部