2009-09-23 70 views
1

我试图存储一个类型System.Collection.Queue。队列将只包含字符串。问题是,当我尝试使用它时,它总是空的。如何使用.NET 3.5中的应用程序设置Windows窗体

Settings.Default.CorrectionsDescription.Enqueue(textString); 

我收到以下错误消息。

未将对象引用设置为对象的实例。

我已经得到StringCollection工作正常,但我需要一个FIFO队列。

你如何初始化队列,在设置或通过代码?当我尝试时,它给出了只读的错误。

+1

您确定队列中null,而不是您的textString? – Natrium 2009-09-23 14:16:25

+0

是的,我甚至完成了.Enqueue(“Hello World”); – Billy 2009-09-23 14:31:07

回答

1

设置通常只存储非常简单的对象或集合中的数据(xml-serializable,甚至字典< TKey,TValue>已经导致问题!)。

队列有特殊的语义,不太适合数据存储。

我建议使用列表<字符串>StringCollection存储设置,并基于该集合应用程序的启动创建队列

保存方式相同,但顺序相反 - 从队列创建List,将其放入Settings类并保存。

更新:

标准设置机制使用XML序列化对象持久化。

对象执行的IEnumerable < T>还必须有方法添加(T值)XML序列队列< T>没有这样的方法,所以不能成功反序列化。

MSDN

XmlSerializer的可以处理实现IEnumerable或ICollection的不同,如果符合特定条件的类。实现IEnumerable的类必须实现一个公共的Add方法,该方法使用单个参数

+0

这实际上是我已经实施到目前为止,但无法弄清楚为什么Queue不起作用。如果可以的话,它会简化一些事情,但在阅读xml-serializable之后,我现在明白了一点。谢谢Konstantin – Billy 2009-09-23 16:08:21

+0

添加信息为什么队列不可序列化。我认为这是您尝试在“设置”中使用它时的主要问题。 – 2009-09-23 16:19:20

+0

我在队列中存储的所有内容都是字符串。没有其他类型的对象。但是我一直无法向队列添加任何内容,因为它是空的。我无法在设计时使用Settings.setting文件进行初始化,也不能在运行时进行初始化。 – Billy 2009-09-23 17:47:05

0

我一直只用:

if (Settings.Default.CorrectionsDescription == null) 
{ 
    Settings.Default.CorrectionsDescription = new Queue(); 
} 

在程序启动,但是我想知道一个更好的方式为好。

+0

我无法得到这个工作要么......我会继续前进,如果它会。我不断收到错误。属性或索引器'ConfigFilesTest.Properties.Settings。CorrectionsDescription'不能被分配 - 它是只读的 – Billy 2009-09-23 14:29:50

+0

也许你的设置范围设置为“应用程序”...尝试将其更改为“用户”,它将是可写 – 2009-09-23 15:42:14

相关问题