3

私はこれをやっています:

string[,] string1 = {{"one", "0"},{"Two", "5"},{"Three","1"}};
int b = 0;

for(int i = 0; i <= string1.Length; i++)
{
     b = int.Parse(string1[i, 1]); // Error occurs here
}

「インデックスは配列の制限を拡張します」というエラーが表示されます(またはそのようなもの、エラーはデンマーク語です)。

4

7 に答える 7

8

2 つの問題があります。

  • string1.Lengthこれは配列の全長であるため 6 を返します。
  • 比較に使用<=しているため、実際には7回反復しようとします。

ループforは次のようになります。

for (int i = 0; i < string1.GetLength(0); i++)

ここへの呼び出しGetLength(0)は、「最初の」次元のサイズとして 3 を返します。GetLength(1)2 番目の次元のサイズが 2 であるため、2 を返す呼び出し。

詳細については、ドキュメントを参照しArray.GetLength()てください。

于 2012-08-29T12:54:51.043 に答える
7

ループ内の配列の境界が正しくありません:

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

読む必要があります:

for(int i = 0; i < string1.GetLength(0); i++) 

2 つの点が間違っていました: <=vs<は 1 つの項目が行き過ぎていることを意味し.Length、配列の全長 (6)GetLength(0)を返すのに対して、最初の次元の長さ (3) を返します。

于 2012-08-29T12:51:17.313 に答える
2

あなたはすでに正しい答えを持っています。それを修正するためだけに私のものを更新します。正しい反復には

        for (int i = 0; i < string1.GetLength(0); i++)
        {
            b = int.Parse(string1[i, 1]);
        }

iは最初の次元の長さを表し、fixed1は 2 番目の要素である数値を返すためです。

最初に間違った回答をしたことをお詫びします。

于 2012-08-29T12:50:56.163 に答える
0

これを試して:

for(int i = 0; i < string1.GetLength(0) ; i++)
{
     b = int.parse(string1[i, 0]); // Error occurs here
}

Array.GetLengthメソッド

配列の指定された次元の要素の数を表す32ビット整数を取得します。

于 2012-08-29T12:52:45.073 に答える
0

に変更i <= string1.Lengthi < string1.Lengthます。

于 2012-08-29T12:51:51.837 に答える
0

への変更

for(int i = 0; i <= string1.GetLength(0); i++) 
{ 
b = Int32.Parse(string1[i][0]);
}

コードが 0 ではなくインデックス 1 を参照しているため、次のような例外が発生します。Array out of bound

于 2012-08-29T12:51:14.180 に答える
0

int.Parseをスローする可能性があることにも言及する価値がありFormatExceptionますint.TryParse

于 2012-08-29T13:36:18.907 に答える