【问题标题】:Trying to store string[][] in settings of WinForms application试图在 WinForms 应用程序的设置中存储 string[][]
【发布时间】:2019-09-24 06:41:44
【问题描述】:

我有一个 winforms 应用程序,我试图将一个二维数组存储到我的 Properties.settings 以供以后提取。我发现我可以通过以下代码在设置中创建一个二维数组:

<Setting Name="TagPresets" Type="System.String[][]" Scope="User">
  <Value Profile="(Default)" />
</Setting>

这很好,但是每当我尝试以编程方式将数组存储到其中时,我都会收到以下错误:

Cannot implicitly convert type 'string[][*,*]' to 'System.Collections.Specialized.StringCollection'

这不应该发生,因为我显然将设置声明为二维数组。这是我尝试设置的代码:

Settings.Default.TagPresets = new string[1][,] { new string[,] { { "", "" } } };

我们将不胜感激任何有关其他方式的帮助或想法。

【问题讨论】:

  • 您到底想在设置文件中存储什么?设置是为安装时确定的数据设计的,例如数据库或网络连接字符串,然后永远不会更改。如果您尝试在设置中存储用户数据,您将遇到大量问题,例如当用户修复其安装或其他用户运行应用时数据消失。
  • 我试图存储用户数据。正如 TimB 所提到的,更好的方法是使用自定义文件,这就是我要做的。

标签: c# arrays string winforms settings


【解决方案1】:

这些设置不能处理数组、列表等。他们唯一可以处理的类似列表的数据类型是前面提到的 StringCollection。

也就是说,最好的方法可能是根本不使用设置,而是使用单独的 XML 或 JSON 文件,程序在启动时读取并在退出前写入。

虽然将 StringCollection 转换为数组、列表、队列或堆栈有效,但我认为这不适用于多维数组。

作为事后的想法:当然,您可以在主数组中获取每个子数组,将其连接到某个字符,然后将该连接的字符串添加到 StringCollection。在下一次启动时,遍历 StringCollection 的值,在您用于连接的字符上拆分每个值,并将生成的数组添加到您之前创建的主数组中。但老实说,我会使用 XML 或 JSON。

【讨论】:

  • 谢谢。我不知道设置不能保存数组。
猜你喜欢
  • 2010-10-29
  • 2015-06-08
  • 2011-03-03
  • 2011-01-14
  • 2015-11-24
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多