Array.Copy和Array.ConstrainedCopy - C#

时间:2011-08-22 03:00:33

标签: c# arrays

当我读到Array.cs并不能保证副本成功并且事实上甚至可能破坏原始实例时,我正在查看Array.Copy()的源代码(如果我是正确的话请纠正我)这里错了)。为了让您高枕无忧,ConstrainedCopy ()似乎也达到了同样的目的。

我的问题是:
1 GT;为什么有人会使用Array.Copy(),如果它似乎不能保证成功传输数据并继续可能损害原始实例?事实上,所有集合类似乎都使用Array.Copy()来增加它们的实例大小。为什么不在这里使用ConstrainedCopy()

2 - ;那么一直使用ConstrainedCopy ()的费用是多少?我假设ConstrainedCopy ()会添加更多逻辑?

3 个答案:

答案 0 :(得分:15)

Object[] objArray = { "Anakin", "Skywalker", 666 };
String[] stringArray = new String[3];
  1. Array.Copy(objArray, stringArray , 3);

    这会抛出无效的强制转换异常。即使抛出异常(如果你吞下它),objArray的前两个元素也会被复制到stringArray。

  2. Array.ConstrainedCopy(objArray, 0, stringArray, 0, 3);

    抛出System.ArrayTypeMismatchException,不会将任何元素复制到目标数组(stringArray)。

答案 1 :(得分:4)

ConstraintedCopy()不保证成功。 MSDN Docs的第一行说明:

  

从指定源索引处开始复制Array中的一系列元素,并将它们粘贴到从指定目标索引开始的另一个Array。保证如果副本没有完全成功,则撤消所有更改。

更具体地说,第二行:

  

如果副本不成功,保证撤消所有更改   完全。

在非常极端的情况下仍然会抛出异常。但是这些情况非常特殊,在大多数情况下你都不必担心它们。

简而言之,只需坚持使用Array.Copy()即可。

答案 2 :(得分:1)

请参阅此问题:C# quickest way to shift array

ConstrainedCopy略慢,但不显着