0

文字列リスト (storedProcedures) を繰り返し処理し、各リスト項目を配列に分割しています。次に、特定のインデックスを使用して配列要素にアクセスしたいと思います。配列の 2 番目の要素にアクセスしようとするとすぐに、範囲外の例外が発生します。

string[] myArray = new string[4];
foreach (string procedure in storedProcedures)
{
    myArray = procedure.Split(',');

    foreach (string index in myArray)
    {
        Console.WriteLine(index);
    }

    for (int i = 0; i < myArray.Length; i++)
    {
        Console.WriteLine(myArray[i]);
    }

    Console.WriteLine(myArray[0]);
    Console.WriteLine(myArray[1]);  <---- out of range exception here
    Console.WriteLine(myArray[2]);
    Console.WriteLine(myArray[3]);
}

'foreach' および 'for' ループを使用して配列にアクセスし、その内容を出力することは正常に機能するため、インデックスを直接指定して配列にアクセスすることが機能しない理由がわかりません。

4

3 に答える 3

3

これは役に立たない:

string[] myArray = new string[4];

これはあなたの配列を捨てるからです:

myArray = procedure.Split(',');

あなたの問題は、のいずれかにstoredProceduresコンマが含まれていないことです。

于 2013-01-16T02:42:32.763 に答える
1

何がConsole.WriteLine(myArray.Length)表示されますか? サイズ 4 で配列を開始しましたprocedure.Split(',')が、新しい配列を作成しました。これには、要素が 1 つしか含まれていない可能性があります。

于 2013-01-16T02:40:23.920 に答える
1

おそらく、分割配列が予想よりも短くなっています。配列から値を取得する前に、常に長さを確認する必要があります。いくつかのコンマが欠落している可能性があります。文字列が適切にフォーマットされていない可能性があります...次のように、より適切にデバッグしてください。

foreach (String procedure in storedProcedures)
{
    Console.WriteLine("Current Procedure: \"" + procedure + "\"");

    String[] split = procedure.Split(',');

    Console.WriteLine("Split Length: " + split.Length.ToString());

    for (int i = 0; i < myArray.Length; i++)
        Console.WriteLine(i.ToString() + ") " + split[i]);
}
于 2013-01-16T03:03:57.253 に答える