我需要选择多个文本并将它们放入一个数组中,但是我收到了这个错误:
System.ArgumentOutOfRangeException:'索引超出范围。必须是非负数且小于集合的大小。'
public static List<string> uploadFileList = new List<string>();
public void SelectFiles()
{
int i;
SelectedFileText.Text = "";
dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Multiselect = true;
Nullable<bool> result = dlg.ShowDialog();
for (i = 0; i < 10; i++)
{
foreach (String filename in dlg.FileNames)
{
SelectedFileText.Text += filename + "\n";
SelectedFileText.Text = uploadFileList[i];
}
}
}
答案 0 :(得分:2)
当uploadFileList
为空时,尝试按索引(uploadFileList[i]
)访问不存在的元素会导致异常。
您可以使用List.AddRange和String.Join方法来完全避免for
循环
public void SelectFiles()
{
dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Multiselect = true;
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
uploadFileList.Clear();
uploadFileList.AddRange(dlg.FileNames);
SelectedFileText.Text = String.Join(Environment.NewLine, uploadFileList);
}
}
答案 1 :(得分:1)
List<T>
不数组,您共享的代码不会尝试向列表中插入任何内容,它会尝试从该列表中获取值。<登记/>
您收到此错误是因为您的列表为空,但您尝试从中提取值。
您应该将foreach
循环中的第二行更改为uploadFileList.Add(filename)
,并摆脱外循环:
public void SelectFiles()
{
int i;
SelectedFileText.Text = "";
dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Multiselect = true;
Nullable<bool> result = dlg.ShowDialog();
foreach (String filename in dlg.FileNames)
{
SelectedFileText.Text += filename + "\n";
uploadFileList.Add(filename);
}
}
答案 2 :(得分:0)
你的问题是由两行
引起的for (i = 0; i < 10; i++)
和
SelectedFileText.Text = uploadFileList[i];
第一个假定列表中有十个项目在第二个语句中被访问。
如果列表uploadFileList
填充在其他位置,我建议放置
uploadFileList.Count()
代替第一个语句,只循环次数与列表中的项目一样多次。
答案 3 :(得分:0)
您的收藏中是否有10件商品uploadFileList
。尝试循环整个集合直到结束:
for (i = 0; i < uploadFileList.Count; i++)
{
foreach (String filename in dlg.FileNames)
{
SelectedFileText.Text += filename + "\n";
SelectedFileText.Text = uploadFileList[i];
}
}
或者您可以使用foreach:
foreach (String file in uploadFileList)
{
foreach (String filename in dlg.FileNames)
{
SelectedFileText.Text += filename + "\n";
SelectedFileText.Text = file;
}
}