在c#中初始化锯齿状数组会使索引超出范围异常

时间:2013-10-10 23:15:33

标签: c# arrays exception multidimensional-array outofrangeexception

field = new int[input.Width][][];

for (int x = 0; x < input.Width; x++)
{
       field[x] = new int[input.Height][];

       for (int y = 0; y < 3; y++)
       {
           field[x][y] = new int[3];
       }
}

出于某种原因,上面的代码让我超出范围异常,但以下工作正常:

field = new int[input.Width][][];

for (int x = 0; x < input.Width; x++)
{
       field[x] = new int[input.Height][];

}

for (int y = 0; y < input.Height; y++)
{

       for (int x = 0; x < input.Width; x++)
       {
            field[x][y] = new int[3];                   

            field[x][y][0] = random.Next(0, output.Width);
            field[x][y][1] = random.Next(0, output.Height);
            field[x][y][2] = MaskFunctions.DSCALE;

        }
 }

有谁可以指出我做错了什么?

另外:超出范围和出界异常之间是否存在差异?

1 个答案:

答案 0 :(得分:4)

您的内部循环从0变为3,而不是0变为input.Height。这会在input.Height < 3时产生超出范围的异常。

您可能打算这样做:

field = new int[input.Width][][];

for (int x = 0; x < input.Width; x++)
{
       field[x] = new int[input.Height][];

       for (int y = 0; y < input.Height; y++)
       {
           field[x][y] = new int[3];
       }
}