我有一个多维数组,我正在使用它作为一个盒子,我有代码围绕它生成一个边框,如下所示:
#######
# #
# #
# #
# #
#######
然而,我不明白的是,我可以在“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;
}
}
}
为什么这样做,我应该使用的正确值是什么?
由于
答案 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