c# 不确定元素个数 二维数组怎么定义

int[,] xy=new int[,]{{}}; //或者int[,] xy=new int[,]{};
int num = 1;
if(...)
{
xy[0, 0] = x; //运行到此处的时候总是报错 说我索引超过数组范围
xy[0, 1] = y;
num++;
}

我不知道是不是我数组的声明和定义不对
大侠们帮忙看看吧
xy[0, 0] = x; //此处改为 xy[num, 0] = x;
xy[0, 1] = y; // xy[num, 1] = y;

对于动态数组,建议使用List,ArrayList等Collection类
1, 它们可以用Add,Remove来添加/删除成员,而不用担心越出数组边界
2, ArrayList可以直接像数组一样访问其成员,比如:int x=(int)SampleArrayListObject[index];
3, Collection类可以用ToArray()方法轻松地导出成数组。

如果实在不想用Collection类,可以初始化数组时设定长度为1,然后每次添加数组成员前先检查是否需要修改边界,是的话用Array.Resize() 来改变数组大小。不过Array.Resize只适用于一维数组,如果你想在多个维度上都建立动态,以下是二维的代码:
T[,] ResizeArray<T>(T[,] original, int rows, int cols)
{
var newArray = new T[rows,cols];
int minRows = Math.Min(rows, original.GetLength(0));
int minCols = Math.Min(cols, original.GetLength(1));
for(int i = 0; i < minRows; i++)
for(int j = 0; j < minCols; j++)
newArray[i, j] = original[i, j];
return newArray;
}

想必你也看得出来,这样子每次调整数组大小,系统开销是很大的。就算前面提到的.NET提供的Array.Resize()也是用同样的方法实现的:建立新数组,拷贝原数组的内容至新数组。所以不到万不得已,不建议使用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-06
不确定数组大小,你这样定义一定会出问题。
不知道你是用它干什么。
相似回答