Array类中的Array.Copy方法是否会改变C#中数组的大小?

时间:2013-07-23 14:25:57

标签: c# methods arrays

从我理解这行代码

Array.Copy(intArray, intArray2, intArray.Length);

两者都将intArray的元素复制到intArray2中,并指定目标数组的长度。但是,它也可能意味着intArray.Length作为最后一个参数指定要复制到的索引范围。

例如:

using System;
public class myClass{
    public static void Main(){

        int[] intArray = new int[] {1,2};
        int[] intArray2 = new int[intArray.Length + 1];
        Array.Copy(intArray, intArray2, intArray.Length);
        intArray = intArray2;
        foreach(int i in intArray){
            Console.Write(intArray[i]);
        }
    }
}

为什么打印出201?

1 个答案:

答案 0 :(得分:3)

它不会改变数组的大小。看看你在做什么。

使用Length或2初始化一个新数组。创建数组

int[] intArray = new int[] {1,2};
int[0] = 1
int[1] = 2

此行创建一个长度为3的新数组

int[] intArray2 = new int[intArray.Length + 1];

intArray.Length返回2,然后向其中添加1。使intArray2 3的长度。

默认情况下,intArray2中的所有int数组值都设置为0.

intArray2[0] = 0 
intArray2[1] = 0 
intArray2[2] = 0

You Copy函数正在将值从intArray复制到intArray2 制备

intArray2[0] = 1
intArray2[1] = 2 
intArray2[2] = 0

intArray = intArray2 

不会将值复制回intArray。它将intArray指向intArray2的地址。

编写foreach循环的方式会导致数组打印为:

intArray[1] = 2
intArray[2] = 0
intArray[0] = 1

应该写成

foreach(int i in intArray)
{
    Console.Write(i);
}

<强>更新

  

从我理解这行代码

     

Array.Copy(intArray,intArray2,intArray.Length);

     

两者都将intArray的元素复制到intArray2中,并指定目标数组的长度。但是,它也可能意味着intArray.Length作为最后一个参数指定要复制到的索引范围。

在这两个陈述中你都不太正确。

Array.Copy方法参数,特别是您引用的最后一个参数,是从原始数组中复制的元素数。它不会指定目标数组的长度。你使用单词范围也不太正确。那就是(恕我直言)

Array.Copy(intArray, intArray2, startIndex, endIndex);

我不认为它存在于.NET Framework中。