Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
C# 当CopyTo非静态方法的目标和源是同一个数组时,如何发生重叠?_C#_Arrays - Fatal编程技术网

C# 当CopyTo非静态方法的目标和源是同一个数组时,如何发生重叠?

C# 当CopyTo非静态方法的目标和源是同一个数组时,如何发生重叠?,c#,arrays,C#,Arrays,在书中,我读到: 与静态复制方法一样,Array类定义了一个非静态CopyTo方法,该方法从 在指定的偏移处。之所以使用此方法,是因为所有数组都实现某些集合接口,包括ICollection(其中T 是数组的元素类型),它定义此CopyTo方法复制 To不保证正确处理重叠,文档 ATION建议在您熟悉的场景中使用Array.Copy 将处理阵列CopyTo只是为了通用目的 可用于集合的任何实现的代码 接口 它说当使用CopyTo非静态方法时,重叠将无法正确处理。问题是,我认为在数组上使用CopyT

在书中,我读到:

与静态复制方法一样,Array类定义了一个非静态CopyTo方法,该方法从 在指定的偏移处。之所以使用此方法,是因为所有数组都实现某些集合接口,包括ICollection(其中T 是数组的元素类型),它定义此CopyTo方法复制 To不保证正确处理重叠,文档 ATION建议在您熟悉的场景中使用Array.Copy 将处理阵列CopyTo只是为了通用目的 可用于集合的任何实现的代码 接口

它说当使用
CopyTo
非静态方法时,重叠将无法正确处理。问题是,我认为在数组上使用
CopyTo
时,可能不会发生重叠!因为,它正在尝试将整个数组复制到目标。如果目标与源相同,则目标与源大小相同,因此,我们可以复制到的唯一位置是
0
(我的意思是第二个参数必须为零:
myArray.CopyTo(myArray,0)
),因此,每个元素都精确地复制到索引处,即它已经存在的位置。那么这本书讨论的重叠问题是什么? 我所说的一切都可以在下面的代码中看到:

> var a = new int[] { 1, 2, 3 };
> a
int[3] { 1, 2, 3 }
> a.CopyTo(a, 0) // this is the only way I can call this method without 
                 // getting error, If I want to pass the same array as first argument
> a
int[3] { 1, 2, 3 }  // nothing went wrong! What is to worry about?
除了我说的以外,为什么有人可以将索引为0的数组复制到自身中?这样做有什么意义?我错过了什么

请注意,这与问题不同。所以这篇文章是关于
Copy
method,而不是
CopyTo

我认为在使用数组时,所有关于重叠的注意事项只有在我们将数组传递给
Copy()
时才有意义。如SO帖子中所述。

调用
CopyTo
归结为调用
Array.Copy
in。是的,这与。

那么,将数组复制到自身有什么意义呢?您可以查看实现,它是通过内部call@PavelAnikhouskiCopy能够将数组的子集复制到自身,并且它有很多用例!我问的是Array.copy,它将整个数组复制到自身!正在更改阵列!这里是您的问题
vara=newint[]{1,2,3}
创建一个长度为3的数组。如果执行
a.CopyTo(a,0)
它将从索引0开始将
a
的条目写入
a
。因此,您最终将3项写入索引0,1,2。但是如果您尝试类似于
a.CopyTo(a,1)
的操作,这意味着将
a
的元素复制到
a
从索引1开始该过程,现在您需要
a
中的4个元素来执行此操作,而您没有这些元素。你只得到了3。这本书似乎是错的
为什么有人可以将索引0处的数组复制到自身中?
这可能毫无意义,是的。你读过这个问题吗?即使
CopyTo
包装
Array.Copy
,它也不能解释在使用实例方法
CopyTo
时如何发生重叠。使用
数组可能会发生重叠。复制
,但在我的情况下似乎不正确。这本书似乎不正确。它解释了如何避免重叠。你显然已经得到答案了。问作者?我给出版商发了邮件。还没有收到任何答复。