0

配列内のアイテムをlistViewに追加するforループがあります。

(Webページ上のアイテムを取得し、文字列の'の後のすべてを削除してから、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 に答える