10

我正在编写一个应用程序,我想存储用户选择的文件列表。目前,我的一个设置是一个名为 filesToFetch 的 StringCollection,它是用户范围的,包含程序应该获取的所有文件的路径。我有一个按钮,允许用户将新文件添加到列表中。这是按钮单击事件的代码

private void button1_Click(object sender, EventArgs e)
{
    DialogResult result = openFileDialog1.ShowDialog();
    if (result == DialogResult.OK)
    {
        Properties.Settings.Default.filesToFetch.Add(openFileDialog1.FileName);
        Properties.Settings.Default.Save();
    }
}

当我尝试将新文件添加到 StringCollection 时,出现错误

NullReference 异常未处理

你调用的对象是空的。

我认为这可能是因为 filesToFetch 尚未初始化,但我不太确定。我可能是错的,但我认为一个对象在初始化时会获得一个名称,并且由于我的设置都是在设计时获得名称,我假设它们在程序运行时自动初始化,但现在我想我可能错了对这个。这是问题,还是我错过了其他东西?

这是我的设置的屏幕截图以供参考。

属性设置

4

4 回答 4

17

如果您想在设置 GUI 中输入值,在最右侧有一个“...”按钮,允许您输入每个分隔在一行中的初始字符串值。然后它将其转换为 XML,如下所示:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>String1</string>
  <string>String2</string>
</ArrayOfString>

编辑:是的,您需要初始化 StringCollection,而我上面的答案是使用 GUI 进行初始化的方法。认为它会帮助那些偶然发现这篇文章的人(像我一样)寻找一种方法来初始化像 OP 需要做的 StringCollection 设置。

于 2014-06-18T01:28:34.847 回答
3

我可能应该进一步解释一下。假设您要使用字符串列表。您可以声明:

IList<string> a;

此时 a = null 并且 null 没有 Add 方法。如果你初始化:

IList<string> a = new List<string>();

现在 a = 一个空的字符串列表。此时它将有一个 Add 方法用于将字符串添加到列表中。

于 2012-11-16T15:49:31.820 回答
0

我在使用 add 方法时遇到了类似的问题,但是使用 index 和 value 参数插入效果很好。

https://msdn.microsoft.com/en-us/library/system.collections.specialized.stringcollection.insert%28v=vs.110%29.aspx

像这样的东西可能会起作用:

private void button1_Click(object sender, EventArgs e)
{
    DialogResult result = openFileDialog1.ShowDialog();
    if (openFileDialog1.ShowDialog(this) != DialogResult.OK)
        return;
    int x = 0;
    foreach (String file in openFileDialog1.FileNames)
    {
        Properties.Settings.Default.activeFiles.Insert(x, openFileDialog1.Filename);
        x++;
    }

    Properties.Settings.Default.Save();
}
于 2015-04-30T04:36:53.873 回答
0

虽然问题很棘手,但解决方案很简单。像你一样创建一个设置。将以下代码复制并粘贴到Default Value并继续以您的方式工作。

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

说明在 C# 中使用字符串集合设置

希望这可以帮助。谢谢你。

于 2020-05-17T20:57:54.923 回答