多个文本到数组

时间:2018-05-24 08:24:26

标签: c#

我需要选择多个文本并将它们放入一个数组中,但是我收到了这个错误:

  

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];
         }
     }     
}

4 个答案:

答案 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;
    }
}