zoukankan      html  css  js  c++  java
  • C#中复制数组

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cloproad/article/details/78864266
    因为数组是引用类型,所以将一个数组变量赋值给另一个数组变量后,这两个引用会指向同一个数组对象,因此对一个数组进行改变会影响到另一个数组的结构。

    而复制数组会创建一个数组的副本(浅表副本)。两种方式:1、实例方法:a.Clone( );    2、静态方法:Array.Copy(...);

    1、 数组的元素是值类型

    对复制数组或原数组的修改不会影响到另一个数组,因为值类型的复制只是拷贝原来的值,会重新分配内存。如下:

    int [] array1 = {1,2};
    int [] array2 = (int [])array1.Clone();
    // Clone() 返回的是object 类型,需要进行类型转换


    2、 数组的元素是引用类型

    对复制数组或原数组中元素的修改会影响到另一个数组,因为数组的元素是引用类型,复制元素时只是复制了引用。如下:


    // Person 类,有一个构造函数,初始化里面的姓名字段
    Person [] array1 = {new Person("a"),new Person("b")};
    Person [] array2 = (Person[]) array1.Clone();

    另一种方法:Array.Copy(...)  比较灵活,可以部分复制

    如下所示:需要原数组,目标数组,默认从0开始,复制 length长度的值,也可以自定义原数组的起始下标,目标数组的起始下标。

    public static void Copy(Array sourceArray,Array destinationArray,int length)
    public static void Copy(Array sourceArray,int sourceIndex,Array destinationArray,int destinationIndex,int length)
    还有另外两个重载方法,不过是将上面两个方法的int 类型变成 long 类型。

    注意:目标数组的阶数要与原数组保持一致,复制长度要小于等于两个数组的长度最小值。


    int[] aa = {1,3,4,6};
    int[] bb = new int [8];
    Array.Copy(aa,bb,aa.Length);
    // 输出bb数组,结果是: 1,3,4,6,0,0,0,0
    注意:
    1.下标需要小于数组的长度
    2.(复制长度 <= aa.length - 起始下标1)
    3.(复制长度 <= bb.length - 起始下标2)
    int[] aa = {1,3,4,6};
    int[] bb = new int [8];
    Array.Copy(aa,1,bb,2,3);
    // 从aa数组的下标1处开始复制,复制到bb数组下标2开始的位置,复制长度是3
    // 输出bb数组,结果是: 0,0,3,4,6,0,0,0

    当需要的复制数组很多并且处理方法有多个时,可以考虑使用部分数组,更加方便。C#中部分数组:点击打开链接
    ---------------------
    作者:cloproad
    来源:CSDN
    原文:https://blog.csdn.net/cloproad/article/details/78864266
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    linux命令大全
    IP协议
    TCP、IP、ARP协议之间的工作关系
    程序出现问题后
    HTTP(超文本传输协议)
    多线程
    syslog.conf文件
    logger命令
    gdb
    二、数据的存储结构
  • 原文地址:https://www.cnblogs.com/dearzhoubi/p/9834995.html
Copyright © 2011-2022 走看看