IndexOutOfRangeException未处理 - 索引超出了数组的范围

时间:2012-11-23 17:01:15

标签: c# windows arrays forms listview

我有一个for循环,它将数组中的项添加到listView。

(它会抓取网页上的项目,删除字符串中的'之后的任何内容,然后将其添加到listView中)

我得到的错误是:IndexOutOfRangeException was unhandled- Index was outside the bounds of the array

这是我正在使用的代码:

string[] aa = getBetweenAll(vid, "<yt:statistics favoriteCount='0' viewCount='", "'/><yt:rating numDislikes='");
for (int i = 0; i < listView1.Items.Count; i++)
{
    string input = aa[i];
    int index = input.IndexOf("'");
    if (index > 0)
        input = input.Substring(0, index);
    listView1.Items[i].SubItems.Add(input);
}

此行发生错误:string input = aa[i];

我做错了什么?我怎样才能解决这个问题所以它会停止发生?谢谢!

如果您想知道 getBetweenAll 方法的代码是:

private string[] getBetweenAll(string strSource, string strStart, string strEnd)
{
    List<string> Matches = new List<string>();

    for (int pos = strSource.IndexOf(strStart, 0),
        end = pos >= 0 ? strSource.IndexOf(strEnd, pos) : -1;
        pos >= 0 && end >= 0;
        pos = strSource.IndexOf(strStart, end),
        end = pos >= 0 ? strSource.IndexOf(strEnd, pos) : -1)
    {
        Matches.Add(strSource.Substring(pos + strStart.Length, end - (pos + strStart.Length)));
    }

    return Matches.ToArray();
}

3 个答案:

答案 0 :(得分:1)

循环'listView1'的元素

如果listView1的项目数超过字符串数组'aa'的元素数,您将收到此错误。

我要么将循环更改为

for( ..., i < aa.Length, ...)

或在你的for循环中放入一个if语句,以确保你没有超过aa的元素。 (虽然,我怀疑这是你想要做的)。

for (int i = 0; i < listView1.Items.Count; i++)
{
   if( i < aa.Length)
   {
      string input = aa[i];
      int index = input.IndexOf("'");
      if (index > 0)
         input = input.Substring(0, index);
      listView1.Items[i].SubItems.Add(input);
   }
}

答案 1 :(得分:0)

嗯,这很简单,你的ListView.Items.Count大于aa.Length。你需要确保它们的大小相同。

答案 2 :(得分:0)

您的for循环应更改为

for (int i = 0; i < aa.Length; i++)

此外,当您执行以下行时,请确保索引匹配。

listView1.Items[i].SubItems.Add(input);

由于您的上述错误,它似乎不匹配,您可能最好循环浏览列表视图以查找匹配的ListView项目,然后将其设置为maniuplate。