我正在编写一个应用程序,我想存储用户选择的文件列表。目前,我的一个设置是名为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尚未初始化,但我不太确定。我可能是错的,但我认为一个对象在初始化时会得到一个名称,并且由于我的设置都在设计时获得了名称,我认为它们会在程序运行时自动初始化,但现在我想我可能是错的对这个。这是问题,还是我错过了其他什么?
以下是我的设置的屏幕截图供参考。
答案 0 :(得分:11)
如果要在设置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设置的方法。
答案 1 :(得分:2)
我应该进一步解释一下。假设您要使用字符串列表。你可以声明:
IList<string> a;
此时a = null且null没有Add方法。如果你初始化:
IList<string> a = new List<string>();
现在a =一个空的字符串列表。此时它将有一个Add方法用于向列表中添加字符串。
答案 2 :(得分:0)
我使用add方法有类似的问题,但插入索引和值参数工作正常。
这样的事可能有用:
<div class="form-group">
@Html.LabelFor(model => model.FechaHasta, new { @class = "col-sm-2 control-label" })
<div class="col-sm-10">
@Html.EditorFor(model => model.FechaHasta, new { htmlAttributes = new { @class = "form-control" } })
<span class="icon" aria-hidden="true"></span>
<div class="help-block">
@Html.ValidationMessageFor(model => model.FechaHasta)
</div>
</div>
</div>
答案 3 :(得分: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" />
说明Use a string collection setting in C#
希望这会有所帮助。谢谢。