Array.Copy和Array.ConstrainedCopy-C#

Array.Copy和Array.ConstrainedCopy-C#,c#,arrays,C#,Arrays,当我读到Array.cs时,我正在浏览Array.Copy()的源代码,它不能保证复制成功,甚至可能损坏原始实例(如果我在这里出错,请纠正我)。为了让人安心,ConstrainedCopy()似乎也达到了同样的效果 我的问题是: 1> 如果Array.Copy()?实际上,所有集合类似乎都使用Array.Copy()来增加其实例大小。为什么不在这里使用ConstrainedCopy() 2> 那么一直使用ConstrainedCopy()的成本是多少?我假设将有更多的逻辑添加到Constrain

当我读到
Array.cs
时,我正在浏览
Array.Copy()
的源代码,它不能保证复制成功,甚至可能损坏原始实例(如果我在这里出错,请纠正我)。为了让人安心,
ConstrainedCopy()
似乎也达到了同样的效果

我的问题是:
1> 如果
Array.Copy()?实际上,所有集合类似乎都使用
Array.Copy()
来增加其实例大小。为什么不在这里使用
ConstrainedCopy()

2> 那么一直使用
ConstrainedCopy()
的成本是多少?我假设将有更多的逻辑添加到
ConstrainedCopy()

ConstrainedCopy()不保证成功。MSDN文档的第一行说明:

从从指定源索引开始的数组复制一系列元素,并将它们粘贴到从指定目标索引开始的另一个数组。保证在复制未完全成功时撤消所有更改

更具体地说,第二行:

保证在复制失败时撤消所有更改 完全是

异常仍然可以在非常极端的情况下抛出。但是,这些情况是异常的,在大多数情况下,您不必担心它们

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

请看这个问题:

ConstrainedCopy稍慢,但不明显

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

    这会引发无效的强制转换异常。即使在抛出异常之后(如果您接受异常),objArray的前两个元素也会复制到stringArray

  • Array.ConstrainedCopy(objArray,0,stringArray,0,3)

    这会引发System.ArrayTypeMismatchException,并且不会将任何元素复制到目标数组(stringArray)


  • 你能解释一下哪些极端情况会导致例外情况吗?否则我们就不知道我们的场景是否是我们需要担心的。触摸,类似内存不足的预期可能会导致复制失败,大多数情况都超出了复制方法的范围,通常是一个更大问题的迹象。从
    copy
    方法引发的大多数异常都发生在复制开始之前,因此您不需要
    ConstrainedCopy
    来避免索引超出范围或类型不匹配。我能想到的唯一可能在复制过程中发生的异常是
    InvalidCastException
    ThreadAbortException