初始化二维对象数组

时间:2011-08-22 22:59:01

标签: c#

我有一个二维对象数组,我使用传统的循环初始化:

PairDS[,] tempPb1 = new PairDS[LoopCounterMaxValue+1, LoopCounterMaxValue+1];
for (int i = 0; i <= LoopCounterMaxValue; i++)
   for (int j = 0; j <= LoopCounterMaxValue; j++)
      tempPb1[i, j] = new PairDS();

使用Enumerable还是有什么更好的方法吗?

3 个答案:

答案 0 :(得分:1)

我不相信你可以将多维数组表示为Enumerable或List,因为它(CLR)无法知道你打算如何索引数组。

如果你一行一行地完成它,它实际上会更糟(也就是更慢),然后在你正在做的时候简单地循环遍历数组并初始化每个单元格。

答案 1 :(得分:1)

无法使用Enumerable类型直接初始化2D数组,并且正如一些用户指出的那样,您所做的事情没有任何直接的错误。如果你只是想简化循环,虽然这可能是你正在寻找的东西;

const int length = LoopCounterMaxValue + 1;
PairDS[,] tempPb1 = new PairDS[length, lenth];
for (var i = 0; i < length * length; i++) {
  var column = i % length;
  var row = (i - column) / length;
  tempPb1[row, column] = new PairDS();
}

答案 2 :(得分:1)

我认为Initialize可以做到,但它只适用于值类型。

int N = 10;
PairDS[,] temp = new PairDS[N + 1, N + 1];
temp.Initialize();

我建议你做的是使用锯齿状阵列。

class PairDS { public PairDS(int row, int col) { } }


static void Main(string[] args)
{
    int N = 10;
    PairDS[][] temp = Enumerable.Range(0, N + 1).Select(
        (row) => Enumerable.Range(0, N + 1).Select(
            (col) => new PairDS(row, col)).ToArray()).ToArray();
}