我有一个需要存储在我的应用程序配置文件中的文件名列表。
设置页面上初始组合框中出现的唯一集合是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.ObjectCollection
和ListBox.Items
({{1}})之间进行转换?
答案 0 :(得分:1)
您可以将System.Object存储到应用程序的设置中,它不在初始组合框中,但它存在,然后您可以直接将数据存储到对象中。
答案 1 :(得分:0)
最后,我实际上恢复了原始代码,但在StringCollection
和List<string>
之间进行了更清晰的转换 - 丑陋是我的起点。
所以现在开始我有:
possibleImageNames = Properties.Settings.Default.Images.ToList();
然后关闭(我更新配置文件)我有:
Properties.Settings.Default.Images.Clear();
Properties.Settings.Default.Images.AddRange(possibleImageNames.ToArray());
ToList
上的StringCollection
方法是扩展方法 - 用于封装循环代码。