对
Array.ConstrainedCopy
与您的示例实现不同。
阵列.约束复制
事先检查是否有
任何
副本可能会抛出异常,如果是,则根本拒绝复制。例如,从
int[]
到
object[]
包括拳击
int
s、 这可能会引发
OutOfMemoryException
所以
阵列.约束复制
甚至没有试图复制。
object[] dst = { 1, 2 };
int[] src = { 3, 4 };
Array.ConstrainedCopy(src, 0, dst, 0, 2);
发生ArrayTypeMismatchException
Array.ConstraintdCopy仅适用于可证明兼容的数组类型,而不会对每个数组元素进行任何形式的装箱、取消装箱、加宽或强制转换。更改阵列类型(即,将派生[]复制到基[]),或在CER中对array.copy功能较弱的可靠性契约使用缓解策略,例如克隆阵列或丢弃可能损坏的目标阵列。