System.Array.ConstrainedCopy 方法
方法描述
从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 保证在复制未成功完成的情况下撤消所有更改。
语法定义(C# System.Array.ConstrainedCopy 方法 的用法)
public static void ConstrainedCopy( Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length )
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
sourceArray | System-Array | Array ,它包含要复制的数据。 |
sourceIndex | System-Int32 | 一个 32 位整数,它表示 sourceArray 中复制开始处的索引。 |
destinationArray | System-Array | Array ,它接收数据。 |
destinationIndex | System-Int32 | 一个 32 位整数,它表示 destinationArray 中存储开始处的索引。 |
length | System-Int32 | 一个 32 位整数,它表示要复制的元素数目。 |
返回值 | void |
提示和注释
sourceArray 和 destinationArray 参数必须具有相同的维数。 sourceArray 类型必须等同于或从 destinationArray 类型派生,否则将引发 ArrayTypeMismatchException 异常。 与 Copy 不同,ConstrainedCopy 在执行任何操作前都将验证数组类型的兼容性。
在多维数组之间复制时,数组像一维长数组那样操作,其中各行(或列)在概念上首尾相连。 例如,如果一个数组有三行(或列),每一行(或列)带有四个元素,若要从数组的开始复制六个元素,则会复制第一行(或列)的所有四个元素和第二行(或列)的头两个元素。 若要从第三行(或列)的第二个元素开始复制,则 sourceIndex 必须是第一行(或列)的上限加上第二行(或列)的长度再加上 2 之和。
如果 sourceArray 和 destinationArray 重叠,那么在覆盖 destinationArray 之前,此方法的行为好像 sourceArray 的原始值保留在临时位置那样。
[C++]
此方法等效于标准 C/C++ 函数 memmove,而不是 memcpy。
数组可以是引用类型的数组或值类型的数组。 如果 sourceArray 和 destinationArray 都是引用类型的数组或都是 Object 类型的数组,则执行浅表复制。 Array 的浅表副本是包含对与原始 Array 相同的元素的引用的新 Array。 不复制元素本身和元素引用的任何内容。 相比之下,Array 的深层副本会复制元素和元素直接或间接引用的一切。
如果此方法在复制时引发异常,destinationArray 将保持不变;因此,ConstrainedCopy 可在受约束的执行区域 (Cer) 中使用。
此方法的运算复杂度为 O(n),其中 n 是 length。
System.Array.ConstrainedCopy 方法例子
异常
异常 | 异常描述 |
---|---|
ArgumentNullException |
|
RankException | sourceArray 和 destinationArray 的秩不同。 |
ArrayTypeMismatchException | sourceArray 类型不同于并且不是从 destinationArray 类型派生的。 |
InvalidCastException | sourceArray 中的至少一个元素无法强制转换为 destinationArray 类型。 |
ArgumentOutOfRangeException |
|
ArgumentException |
|
版本信息
.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。