Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Array类中的Array.Copy方法是否更改了C#中数组的大小?_C#_Methods_Arrays - Fatal编程技术网

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

Array类中的Array.Copy方法是否更改了C#中数组的大小?,c#,methods,arrays,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 in

根据我对这行代码的理解

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或2的新数组。创建数组

int[] intArray = new int[] {1,2};
int[0] = 1
int[1] = 2
此行将创建一个长度为3的新数组

int[] intArray2 = new int[intArray.Length + 1];
Length返回2,然后向其中添加1。制作长度为2-3英寸

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

i、 e

复制函数正在将值从intArray复制到intArray2 制作

线路

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

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

intArray[1] = 2
intArray[2] = 0
intArray[0] = 1
它应该写为

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

根据我对这行代码的理解

数组.Copy(intArray,intArray2,intArray.Length)

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

这两种说法你都不太正确

方法参数,特别是您提到的最后一个参数,是要从原始数组复制的元素数。它不会指定目标数组的长度。你对range这个词的使用也不太正确。那就是(IMHO)


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

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

这将初始化长度为1或2的新数组。创建数组

int[] intArray = new int[] {1,2};
int[0] = 1
int[1] = 2
此行将创建一个长度为3的新数组

int[] intArray2 = new int[intArray.Length + 1];
Length返回2,然后向其中添加1。制作长度为2-3英寸

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

i、 e

复制函数正在将值从intArray复制到intArray2 制作

线路

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

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

intArray[1] = 2
intArray[2] = 0
intArray[0] = 1
它应该写为

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

根据我对这行代码的理解

数组.Copy(intArray,intArray2,intArray.Length)

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

这两种说法你都不太正确

方法参数,特别是您提到的最后一个参数,是要从原始数组复制的元素数。它不会指定目标数组的长度。你对range这个词的使用也不太正确。那就是(IMHO)


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

C#!=C++!C-不要说“基于C的语言”-它们的行为不同。。。这些语言都有C风格的语法——它们不是基于C的(例如,C是受管理的,没有直接内存管理)。而且每种基于C的语言对数组的定义都不同,这只是关于C的一个问题,仅仅因为内存直接内存管理不是强制的,并不意味着它不是基于C的。如果是这样的话,那么你可以说Objective-C不是一种基于C的语言,因为你可以打开自动引用,即Garabage collector。所以,是的,我相信你错了C++!C-不要说“基于C的语言”-它们的行为不同。。。这些语言都有C风格的语法——它们不是基于C的(例如,C是受管理的,没有直接内存管理)。而且每种基于C的语言对数组的定义都不同,这只是关于C的一个问题,仅仅因为内存直接内存管理不是强制的,并不意味着它不是基于C的。如果是这样的话,那么你可以说Objective-C不是一种基于C的语言,因为你可以打开自动引用,即Garabage collector。所以是的,我相信你错了。哦,我甚至没有看到索引滥用,这就是为什么它打印201而不是120。。。伙计,这个小片段是一个壮观的specimentoreach(intArray中的inti){Console.Write(intArray);}这会打印出System.Int32[]System.Int32[]System.Int32[]System.Int32[]哦,我甚至没有看到索引滥用,这就是为什么它会打印201而不是120。。。这个小片段是一个壮观的specimenforeach(intArray中的inti){Console.Write(intArray);}这将打印出System.Int32[]System.Int32[]System.Int32[]System.Int32[]