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