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

本文关键字:Array 数组 是否 Copy 方法 | 更新日期: 2023-09-27 18:24:21

根据我对代码的理解

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

两者都将intArray的元素复制到intArray2中,并指定Destination Array的长度。然而,这也可能意味着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?

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

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

这将初始化一个长度为或2的新数组。创建阵列

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

这条线创建了一个长度为3的新阵列

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

Length返回2,然后再加1。使intArray2的长度为3。

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

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

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中,并指定Destination Array的长度。然而,这也可能意味着intArray.Length作为最后一个参数指定了要复制到的索引范围。

在这两种说法中,你都不太正确。

Array.Copy方法参数,特别是您引用的最后一个参数,是要从原始数组中复制的元素数。它不会指定目标数组的长度。你对音域这个词的用法也不太正确。那将是(IMHO)

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

我认为在.NET框架中不存在。