【问题标题】:How to use application settings in .NET 3.5 Windows Forms如何在 .NET 3.5 Windows 窗体中使用应用程序设置
【发布时间】:2009-09-23 14:04:27
【问题描述】:

我正在尝试存储System.Collection.Queue 的类型。队列将只包含字符串。问题是当我尝试使用它时,它总是空的。

Settings.Default.CorrectionsDescription.Enqueue(textString);

我收到以下错误。

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

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

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

【问题讨论】:

  • 你确定队列是空的,而不是你的 textString 吗?
  • 是的,我什至已经完成了 .Enqueue("Hello World");

标签: c# .net settings


【解决方案1】:

设置通常只将数据存储在非常简单的对象或集合中(xml-serializable,甚至 Dictionary 已经导致问题!)。

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

我建议使用 ListStringCollection 来存储设置并根据该集合在应用程序启动时创建 Queue

保存是相同的,但顺序相反 - 从队列中创建列表,将其放入设置类并保存。

更新:

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

实现IEnumerable的对象还必须有方法Add(T value)才能xml-serializableQueue没有这样的方法,无法成功反序列化。

MSDN:

如果满足特定要求,XmlSerializer 可以以不同方式处理实现 IEnumerable 或 ICollection 的类。实现 IEnumerable 的类必须实现一个公共的 Add 方法,该方法采用单个参数

【讨论】:

  • 这实际上是我到目前为止实现它的方式,但无法弄清楚为什么队列不起作用。如果可以的话,它会简化事情,但是在阅读了 xml-serializable 之后,我现在了解更多了。谢谢康斯坦丁
  • 添加了队列不可序列化的原因。我认为这是您尝试在“设置”中使用它时的主要问题。
  • 我在队列中存储的只是字符串。没有其他类型的对象。但是我无法向队列中添加任何内容,因为它是空的。我无法在设计时使用 Settings.setting 文件对其进行初始化,也无法在运行时进行。
【解决方案2】:

我一直只是用:

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

在程序启动时,但我也想知道更好的方法。

【讨论】:

  • 我也无法让它工作......如果可以的话,我会继续前进。我不断收到错误。无法将属性或索引器“ConfigFilesTest.Properties.Settings.CorrectionsDescription”分配给 -- 它是只读的
  • 可能你的设置范围设置为“应用程序”...尝试将其更改为“用户”,它将是可写的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2010-10-15
  • 2010-09-11
相关资源
最近更新 更多