对于长度已定义的数据如果改变其大小呢?并且要不能改变其中内容,今天看了一些帖子,学到了不少,记录一下以备查阅:
背景知识
《.NET中数组的隐秘特性》
http://dev.youkuaiyun.com/develop/article/16/16749.shtm
最笨的方法就是循环赋值:
- private void ChangeArrySize(ref int[] iArry,int iNewSize)
- {
- int[] iNewArry = new int[iNewSize];
- for(int i = 0; i < iArry.Length; i++)
- {
- iNewArry[i] = iArry[i];
- }
- iArry = iNewArry;
- foreach(int i in iArry)
- {
- System.Console.WriteLine(i.ToString());
- }
- }
Array类是所有数组类型的基类,所以可以在这个基类上做文章
- private void ChangeArrySize(ref int[] iArry,int iNewSize)
- {
- Type t =iArry.GetType();
- Array newArray = Array.CreateInstance(t.GetElementType(),iNewSize);
- Array.Copy(iArry,0,newArray,0,Math.Min(iArry.Length, iNewSize));
- iArry = (int[])newArray;
- foreach(int i in iArry)
- {
- System.Console.WriteLine(i.ToString());
- }
- }
第二种方法用到了反射机制,所以其性能问题是需要考虑的
参考 http://www.cnblogs.com/jillzhang/archive/2006/08/10/473326.html