初始化StringCollection设置

Eri*_*ric 7 c# settings stringcollection

我正在编写一个应用程序,我想存储用户选择的文件列表.目前,我的一个设置是名为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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

NullReference异常未处理

你调用的对象是空的.

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

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

属性设置

Ala*_*ght 15

如果要在设置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>
Run Code Online (Sandbox Code Playgroud)

编辑:是的,您需要初始化StringCollection,我的上述答案是使用GUI执行此操作的方法.认为它会帮助人们(像我一样)偶然发现这篇文章寻找初始化像OP需要做的StringCollection设置的方法.

  • OP 没有询问如何通过 Visual Studio GUI 添加设置。 (3认同)
  • 当我遇到这个问题时,这正是我所寻找的. (3认同)
  • OP询问他们为什么要获得空引用,错误,答案是,因为未初始化设置。解决该问题的一种方法是在GUI中对其进行初始化。如果OP做到了这一点,那么他们解决的问题将得到解决,因此这是一个合理而有用的答案。 (2认同)

小智 3

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

IList<string> a;
Run Code Online (Sandbox Code Playgroud)

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

IList<string> a = new List<string>();
Run Code Online (Sandbox Code Playgroud)

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

  • @Kevin是否可以将默认设置设置为空但实例化的字符串列表,而不是不声明它?如果你有很多这样的设置,你必须检查很多设置是否为空,然后实例化它们,这将需要填充很多代码。你会认为框架已经以某种方式涵盖了这些设置。 (2认同)