0

我有一个 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();
}
4

3 回答 3

2

你循环'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);
   }
}
于 2012-11-23T17:05:32.013 回答
0

好吧,这很简单,ListView.Items.Count然后你的更大aa.Length。您需要确保它们具有相同的大小。

于 2012-11-23T17:04:04.230 回答
0

您的 for 循环应更改为

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

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

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

由于您的上述错误,它似乎不匹配,您最好循环遍历列表视图以找到匹配的 ListView 项目,然后对其进行操作。

于 2012-11-23T17:05:20.263 回答