0

据我了解,这行代码

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?

4

1 回答 1

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。

IE

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 中不存在。

于 2013-07-23T14:51:02.580 回答