1

forループを使用してデータテーブルの次の行の値にアクセスして変更しようとしていますが、エラーが発生します:

System.IndexOutOfRangeException: There is no row at position 247.

最終ループでは、次の行が見つからないことを知っています。しかし、存在するかどうかを確認してから値を変更するだけですが、機能していません。
これが私のコードです:

for (int i = 0; i < dt.Rows.Count; i++)
{
  DataRow _row = dt.Rows[i];
  if (_row[1].ToString() != "" && _row[0].ToString() != "")
  {
    int temp = i + 1;
    if (dt.Rows[temp].GetType() == typeof(DataRow))
    {
        dt.Rows[temp][0] = _row[0].ToString();
     }
   }
 }

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

4

取得する行がないため、これは失敗します。したがって、:を呼び出す前でも失敗しますGetType

if (dt.Rows[temp].GetType() == typeof(DataRow))
//  ^^^^^^^^^^^^^  <-- throws an IndexOutOfRangeException here

代わりに、行数より1つ少ない数まで反復できます。

for (int i = 0; i < dt.Rows.Count - 1; i++)
{
    DataRow row = dt.Rows[i];
    DataRow nextRow = dt.Rows[i + 1];
    // ...
}

最後の行に対して何か特別なことをしたい場合は、ループの後でそれを行うことができます。

于 2012-07-04T23:22:41.350 に答える