0

1 次元の配列を扱うのはとても簡単です。しかし、行ごとに長さが異なる 2 次元配列 (ジャグ配列) 内で範囲外の場所をテストしないようにするにはどうすればよいでしょうか?

これが私のコードです(誰かがテストしたい場合):

static void Main(string[] args)
{
    object[][] x = weirdReturn();

    int k = 0;
    while(x[0][k] != null) //THIS CODE PRODUCES THE EXCEPTION
    {
       for(int i = 0; i< x[k].Length; i++) 
        {
            Console.Write("{0} ", x[k][i]);
        }
        Console.WriteLine("");
        k++;
    }


}


static object[][] weirdReturn()
{           
    DateTime d = new DateTime();
    d = DateTime.Now;
    object[] a2 = { 'X', 1.79, d, 100 };
    object[] a1 = { 0, 'a', "objectX" };
    object[][] retVal = new object[2][];
    retVal[0] = a1;
    retVal[1] = a2;
    return retVal;
}
4

1 に答える 1

2

これには魔法はありません。単に長さをチェックし、1 次元配列の場合のように、その値から 1 を引いた値を超えるインデックスを作成しないようにします。

あなたのコードはかなり乱雑に見えます。このように配列をループしようとしているだけですか?

static void Main(string[] args)
{
    object[][] x = weirdReturn();

    for (int i = 0; i < x.Length; i++)
    {
        for (int j = 0; j < x[i].Length; j++)
        {
            Console.Write("{0} ", x[i][j]);
        }
        Console.WriteLine("");
    }
}


static object[][] weirdReturn()
{
    DateTime d = new DateTime();
    d = DateTime.Now;
    object[] a2 = { 'X', 1.79, d, 100 };
    object[] a1 = { 0, 'a', "objectX" };
    object[][] retVal = new object[2][];
    retVal[0] = a1;
    retVal[1] = a2;
    return retVal;
}
于 2013-09-23T13:52:20.663 に答える