我正在编写一个应用程序,我想存储一个由用户选择的文件列表。目前,我的一个设置是一个名为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 没有被初始化,但我不太确定。我可能错了,但我认为对象在初始化时就会得到一个名字,而且由于我的设置都是在设计时得到名字,我认为它们在程序运行时就会自动初始化,但现在我认为我可能错了。是这个问题,还是我遗漏了什么?
下面是我的设置的屏幕截图,供参考。
我也许应该进一步解释一下。假设你打算使用一个字符串列表。你可以声明。
IList<string> a;
这时a=null 而null没有Add方法 如果你初始化。
IList<string> a = new List<string>();
现在a =一个空的字符串列表, 此时它将有一个Add方法,用来向列表中添加字符串。
如果你想在设置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的方式。我想它会帮助那些偶然发现这个帖子的人(比如我),他们正在寻找一种方法来初始化StringCollection设置,就像OP需要做的那样。
我在使用add方法时也遇到了类似的问题,但使用index和value参数插入时却能正常工作。
这样的东西可能会有用。
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();
}
虽然这个问题很棘手,但解决方法很简单,创建一个像你一样的设置。复制&将以下代码粘贴到以下地方。Default Value
&amp;继续以你的方式工作。
<?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" />
希望能帮到你。谢谢你的帮助