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
。