我有一个二维对象数组,我使用传统的循环初始化:
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还是有什么更好的方法吗?
答案 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();
}