我想定义一个二维动态数组,用来存放另一个二维动态数组的内容,用什么方法?
是浅拷贝吗?具体要如何用?

解决方案 »

  1.   


    浅拷贝不行吧?
    .clone()
    或者序列化后深拷贝
      

  2.   

    .NET Framework 类库  
    Array.Clone 方法  创建 Array 的浅表副本。 命名空间:System
    程序集:mscorlib(在 mscorlib.dll 中)语法
    C# 
    public Object Clone ()
     返回值
    Array 的浅表副本。 
    备注
    Array 的浅表副本仅复制 Array 的元素(无论它们是引用类型还是值类型),但不复制这些引用所引用的对象。新 Array 中的引用与原始 Array 中的引用指向相同的对象。相比之下,Array 的深层副本会复制元素和元素直接或间接引用的一切。复本与原始 Array 的 Type 相同。此方法的运算复杂度为 O(n),其中 n 是 Length。
    =========================================================================
    .NET Framework 类库  
    Array.Copy 方法 (Array, Array, Int32)  从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。长度指定为 32 位整数。 命名空间:System
    程序集:mscorlib(在 mscorlib.dll 中)语法
    Array.Copy(sourceArray, destinationArray, length)
     
    C# 
    public static void Copy (
    Array sourceArray,
    Array destinationArray,
    int length

    参数
    sourceArray
    Array,它包含要复制的数据。destinationArray
    Array,它接收数据。length
    一个 32 位整数,它表示要复制的元素数目。
    备注
    sourceArray 和 destinationArray 参数必须具有相同的维数。当在多维数组之间复制时,数组像长一维数组那样操作,在此行(或列)在概念上首尾相连。例如,如果一个数组有三行(或列),每一行(或列)带有四个元素,若要从数组的开始复制六个元素,则会复制第一行(或列)的所有四个元素和第二行(或列)的头两个元素。如果 sourceArray 和 destinationArray 重叠,那么在重写 destinationArray 之前,此方法的行为好像 sourceArray 的原始值保留在临时位置那样。此方法等效于标准 C/C++ 函数 memmove,而不是 memcpy。数组可以是引用类型的数组或值类型的数组。按需要执行类型向下转换。在从引用类型的数组复制到值类型的数组时,每一个元素都要取消装箱,然后再复制。在从值类型的数组复制到引用类型的数组时,每一个元素都要装箱,然后再复制。在从引用类型或值类型的数组复制到 Object 数组时,会创建 Object 以保存每一个值或引用,然后再复制。在从 Object 数组复制到引用类型或值类型的数组,且不可能进行分配时,将引发 InvalidCastException。如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组,则执行浅表复制。Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。不复制元素本身和元素引用的任何内容。相比之下,Array 的深层副本会复制元素和元素直接或间接引用的一切。如果数组是不兼容的类型,则会引发 ArrayTypeMismatchException。类型兼容性的定义如下: 类型与其本身兼容。值类型与 Object 兼容,也与该值类型实现的接口类型兼容。只有当值类型直接实现一个接口时,该值类型才算与该接口连接。断开连接的类型不兼容。如果从源类型复制到目标类型是扩大转换,则两个内部(预定义)值类型兼容。扩大转换从不会丢失信息,而收缩转换可能会丢失信息。例如,将 32 位有符号的整数转换为 64 位有符号的整数是扩大转换,而将 64 位有符号的整数转换为 32 位有符号的整数是收缩转换。有关转换的更多信息,请参见 Convert。非内部(用户定义)值类型只与其本身兼容。如果 sourceArray 中的每个元素都要求向下转换(例如,从基类转换到派生类或从接口转换到对象),且一个或多个元素无法强制转换为 destinationArray 中的对应类型,则会引发 InvalidCastException。如果此方法在复制时引发异常,则 destinationArray 的状态未定义。此方法的运算复杂度为 O(n),其中 n 是 length。
      

  3.   

    Array.copy操作会有装箱和拆箱。