2013-07-26 135 views
2

我有我使用的盒子多维数组,我有一个生成它周围的边框代码,就像这样:C#打印边框二维数组

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

但是什么我不不明白的是,我可以在“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

您在C#中创建的数组(除非直接调用Array.CreateInstance)始终为0。所以GetUpperBound(0)将始终返回rows - 1,并且GetUpperBound(1)将始终返回columns - 1

因此,代码将“工作”无论哪个上限您检查,但我想你会发现,如果rows != columns,然后使用GetUpperBound(0)将创建一个不同大小的盒子比GetUpperBound(1)

顺便说一句,让您的边境将是一种替代方法:

var maxRow = ProcArea.GetUpperBound(0); 
var maxCol = ProcArea.GetUpperBound(1); 
// do top and bottom 
for (int col = 0; col <= maxCol; ++col) 
{ 
    ProcArea[0, col] = 2; 
    ProcArea[maxRow, col] = 2; 
} 
// do left and right 
for (int row = 0; row <= maxRow; ++row) 
{ 
    ProcArea[row, 0] = 2; 
    ProcArea[row, maxCol] = 2; 
} 

这是稍有更多的代码,真实的,但你不浪费不必要的时间检查指标。当然,对小数组不会产生影响。

+0

谢谢,这是一个有趣的做法,我没有想到。虽然我并不总是制作大小相同的盒子,例如10x11或9x8,那么这种代码是否仍然适用? – user9993