C#数组并不是动态的,你必须自己来把他变成动态结构,除非你使用其他类。初始化一个2维数组,有两种方法:
方法1:你可以假设一个初始长度,在对数组添加元素的时候,你都需要对数组做边界检查,如果数组尺寸不够了,你需要创建一个新的数组,然后复制原来的数组到新的数组。
初始化代码如: string[,] myStrings = new string[10,10]; //假设元素的类型为string
方法2:初始化第一维长度为0,在每次插入新的原始的时候,都复制一个新的数组,使它的长度等于原来数组长度+1,这里假定第二维是不变的(因为同时对两个维进行扩展,没有太大的意义,同时增加了复杂度,即使是DataTable,也是先要设置列数,再添加行)
初始化代码如: string[,] myStrings = new string[0,10];
实现数组动态的代码如:
插入新的行的操作:
public void Add(string[] dataString)
{
int rowCount = myStrings.GetUpperBound(0);
int colCount = myStrings[0].GetUpperBound(1);
string[,] temp = new string[rowCount+1, colCount];
for(int i=0; i<rowCount; i++)
for(int j=0; j<colCount; j++)
temp[i,j]= myString[i,j]; //复制原数组到新数组
int k=0;
foreach(string data in dataStrings) //赋值
temp[rowCount,k++] = data;
myStrings = temp; //把新数组设置回字段
}
另外如果第二维需要扩展,可以考虑采用锯齿数组结构,也就是说数组的数组:
string[][] myString;
这种结构和二维数组不同的是,它的第二维可以不是固定的,动态扩展可以按照一维数组分别对两个数组进行。方法类似上面代码的过程,不同的是它可以使用一个类库中的CopyTo方法(当然,CopyTo内部也是逐个复制)。
http://developer.51cto.com/art/200909/148913.htm
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。