有没有比使用StringCollection更好的方法在应用程序配置文件中存储字符串列表?

时间:2010-02-07 22:06:32

标签: c# winforms app-config

我有一个需要存储在我的应用程序配置文件中的文件名列表。

设置页面上初始组合框中出现的唯一集合是System.Collections.Specialized.StringCollection。现在我最初没有查询,因为我立即将其转换为List<string>。有一段我不满意的代码是将这个列表复制到配置对话框中的ListBox和来自public List<string> ImageNames { get { return folderImages.Items.ToList(); } set { folderImages.Items.AddRange(value.ToArray()); } }

StringCollection

但是,我一直在重新审视我的代码,并认为如果我将列表保持为public StringCollection ImageNames { get { var names = new StringCollection(); names.AddRange(folderImages.Items.ToList().ToArray()); return names; } set { value.ToList().ForEach(imageName => folderImages.Items.Add(imageName)); } } ,我可以改进此代码。我使用列表/集合的其他地方都没问题,但这种转换仍然不符合我的喜好:

List<string>

实际上,现在我看到代码并排(实际上)我认为StringCollection版本更“清洁” - 它肯定更清晰。

那么我可以在设置文件中存储另一个集合或列表类型吗?如果可能的话,我真的想避免读取和写入设置文件的转换。

失败 - 是否有更简洁的方式在ListBox.ObjectCollectionListBox.Items({{1}})之间进行转换?

2 个答案:

答案 0 :(得分:1)

您可以将System.Object存储到应用程序的设置中,它不在初始组合框中,但它存在,然后您可以直接将数据存储到对象中。

答案 1 :(得分:0)

最后,我实际上恢复了原始代码,但在StringCollectionList<string>之间进行了更清晰的转换 - 丑陋是我的起点。

所以现在开始我有:

possibleImageNames = Properties.Settings.Default.Images.ToList();

然后关闭(我更新配置文件)我有:

Properties.Settings.Default.Images.Clear();
Properties.Settings.Default.Images.AddRange(possibleImageNames.ToArray());

ToList上的StringCollection方法是扩展方法 - 用于封装循环代码。