C#打印2D阵列周围的边框

时间:2013-07-26 14:59:03

标签: c# multidimensional-array

我有一个多维数组,我正在使用它作为一个盒子,我有代码围绕它生成一个边框,如下所示:

#######
#     #
#     #
#     #
#     #
#######

然而,我不明白的是,我可以在“j == ProcArea.GetUpperBound(...)”部分中使用0或1,并且它可以成功运行,没有任何错误或意外输出。

            int[,] ProcArea = new int[rows, columns];
            //Generate border
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    if (i == 0 || j == 0 || i == ProcArea.GetUpperBound(0) || j == ProcArea.GetUpperBound(1))
                    {
                        ProcArea[i, j] = 2;

                    }
                }
            }

为什么这样做,我应该使用的正确值是什么?

由于

2 个答案:

答案 0 :(得分:2)

如果行数和列数相同,则GetUpperBound(0)GetUpperBound(1)将返回相同的值。

您在C#中创建的数组(除非您直接调用Array.CreateInstance)始终是从0开始的。因此GetUpperBound(0)将始终返回rows - 1,而GetUpperBound(1)将始终返回columns - 1

因此,无论您检查哪个上限,代码都将“正常工作”,但我认为您会发现rows != columns,然后使用GetUpperBound(0)会创建一个不同于{{1 }}

顺便说一下,制作边框的另一种方法是:

GetUpperBound(1)

稍微多一些代码,是的,但是你不必浪费时间不必要地检查索引。当然,不会对小阵列产生影响。

答案 1 :(得分:1)

查看文档http://msdn.microsoft.com/en-us/library/system.array.getupperbound.aspx。您的数组有2个维度(行和列)。

ProcArea.GetUpperBound(0)相当于rows - 1

ProcArea.GetUpperBound(1)相当于columns - 1