现在的位置: 首页 > 综合 > 正文

C#数组Copy探秘(附全码)_AX

2012年12月17日 ⁄ 综合 ⁄ 共 3743字 ⁄ 字号 评论关闭
【起源】
很久很久以前的一道笔试题:大意就是把一个个数组的数据copy到另一个数组中.我当时用的循环赋值.
这两天总在想这个问题,于是动手研究了一下下!
【方法】
循环赋值:最直觉的做法,难道来源于C?数组不能直接copy.
直接赋值:妈呀!这么原始野蛮简单的方法都行.真是不试不知道,一试吓一跳!!
clone赋值:"克隆"真是项相当不错的技术,都弄到编程里来了,clone是首先出现在编程里还是出现在科学试验室里呢?

【总结】
方法①和③是建立副本(魔兽??),赋值后跟源脱离关系,  方法②是引用.其实就是源的另外一个变量名.
如果是②,不管你定义的数组长度是多少,赋值完成后都会与源相同.

【源码】

  1using System;
  2using System.Collections;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Web;
  7using System.Web.SessionState;
  8using System.Web.UI;
  9using System.Web.UI.WebControls;
 10using System.Web.UI.HtmlControls;
 11
 12namespace AX
 13{
 14    /// <summary>
 15    /// TestSimple 的摘要说明。
 16    /// </summary>

 17    public class TestSimple : System.Web.UI.Page
 18    {
 19        private void Page_Load(object sender, System.EventArgs e)
 20        {
 21            // 在此处放置用户代码以初始化页面
 22            if(!this.IsPostBack)
 23            {
 24                //声明
 25                int[] source={1,2,3,4};
 26                int[] target=new int[6]; //OK
 27//                int[] target=null;       //Bad
 28//                int[] target=new int[4]; //OK
 29
 30//                int[] copy=new int[4];//OK
 31//                int[] copy=new int[2];//OK
 32                int[] copy=new int[7];//OK
 33                Response.Write("<font color=#ff7f00>copy的长度:"+copy.Length+"</font><br>");
 34
 35                //循环赋值,OK
 36                for(int i=0;i<4;i++)
 37                {
 38                    target[i]=source[i];
 39                }

 40                Response.Write("循环赋值target[1]="+target[1]+"<br>");
 41
 42                //直接赋值
 43                copy=source;
 44                Response.Write("直接赋值copy[1]="+copy[1]+"<br>");
 45
 46                //clone赋值 OK
 47                int[] clone=(int[])source.Clone();
 48
 49                //改变数组copy元素的值
 50                copy[1]=5;
 51                Response.Write("<br><font color=red>改变copy[1]元素的值:<br>source[1]="+source[1]+"<br>target[1]="+target[1]+"<br>copy[1]="+copy[1]+"<br>clone[1]="+clone[1]+"</font><br>");
 52
 53                //改变数组clone元素的值
 54                clone[1]=9;
 55                Response.Write("<br><font color=6f4242>改变clone[1]元素的值:<br>source[1]="+source[1]+"<br>target[1]="+target[1]+"<br>copy[1]="+copy[1]+"<br>clone[1]="+clone[1]+"</font><br>");
 56
 57
 58//                //改变数组元素后进行clone赋值 OK
 59//                int[] clone=(int[])source.Clone();
 60
 61                //打印出copy的元素
 62                Response.Write("<br>打印出copy的元素:");
 63                foreach(int i in copy)
 64                {
 65                    Response.Write(i);
 66                }

 67
 68                //打印出clone的元素
 69                Response.Write("<br>打印出clone的元素:");
 70                foreach(int i in clone)
 71                {
 72                    Response.Write(i);
 73                }

 74
 75                //显示Copy的第6个元素.Bad
 76//                Response.Write("<br>copy的第6个元素:"+copy[5]);
 77
 78
 79                Response.Write("<br>循环赋值target的长度和第6个元素值:"+target.Length+"||"+target[5]);
 80
 81                //显示Copy的长度
 82                Response.Write("<br><font color=#ff7f00>copy的长度:"+copy.Length+"</font><br>");
 83            }

 84        }

 85
 86        Web 窗体设计器生成的代码
106    }

107}

108

【测试结果】

抱歉!评论已关闭.