我正在尝试存储System.Collection.Queue
类型。队列只包含字符串。问题是,当我尝试使用它时,它总是空的。
Settings.Default.CorrectionsDescription.Enqueue(textString);
我收到以下错误。
对象引用未设置为对象的实例。
我让StringCollection
工作正常,但我需要一个FIFO队列。
如何在“设置”或代码中初始化队列?当我尝试时,它给出了只读的错误。
答案 0 :(得分:1)
设置通常只将数据存储在非常简单的对象或集合中(xml-serializable,甚至Dictionary< TKey,TValue>已经导致问题!)。
队列具有特殊语义,不太适合数据存储。
我建议使用列表< string> 或 StringCollection 来存储设置,并根据该集合在应用程序启动时创建队列。
保存是相同的,但顺序相反 - 从队列中创建List,将其放入Settings类并保存。
<强>更新强>
标准设置机制使用XML序列化来实现对象持久性。
实现 IEnumerable&lt; T&gt; 的对象还必须具有方法添加(T值)才能 xml-serializable 。 队列&lt; T&gt; 没有这样的方法,因此无法成功反序列化。
MSDN:
如果满足某些要求,XmlSerializer可以处理实现IEnumerable或ICollection的类。实现IEnumerable的类必须实现一个带有单个参数的公共Add方法
答案 1 :(得分:0)
我一直用过:
if (Settings.Default.CorrectionsDescription == null)
{
Settings.Default.CorrectionsDescription = new Queue();
}
在程序启动时,但我想知道更好的方法。