- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在查看 Array.ConstrainedCopy
,但我很难弄清楚为什么它的实现在幕后,在 CLR 内部。
ConstrainedCopy
是否执行以下操作以外的其他操作?[ReliabilityContract(Consistency.WillNotCorruptState, CER.Success)]
static void ConstrainedCopy(Array src, int iSrc, Array dest, int iDest, int len)
{
Array backup = Array.CreateInstance(dest.GetType().GetElementType(), len);
Array.Copy(dest, iDest, backup, 0, len);
try { Array.Copy(src, iSrc, dest, iDest, len); }
catch { Array.Copy(backup, 0, dest, iDest, len); throw; }
}
如果是,它还有什么作用?
如果不是,那么为什么 CLR 如此特殊地对待实现,而不是纯 C#/.NET 代码?
最佳答案
是的,Array.ConstrainedCopy
与您的示例实现不同。 Array.ConstrainedCopy
预先检查副本是否有任何机会抛出异常,如果是,则拒绝复制。例如,从 int[]
复制到 object[]
涉及装箱 int
,这可能会抛出 OutOfMemoryException
,所以 Array.ConstrainedCopy
甚至不会尝试复制。
object[] dst = { 1, 2 };
int[] src = { 3, 4 };
Array.ConstrainedCopy(src, 0, dst, 0, 2);
ArrayTypeMismatchException occurred
Array.ConstrainedCopy will only work on array types that are provably compatible, without any form of boxing, unboxing, widening, or casting of each array element. Change the array types (i.e., copy a Derived[] to a Base[]), or use a mitigation strategy in the CER for Array.Copy's less powerful reliability contract, such as cloning the array or throwing away the potentially corrupt destination array.
关于c# - Array.ConstrainedCopy() 是否不仅仅是备份和复制操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002071/
我一直在查看 Array.ConstrainedCopy,但我很难弄清楚为什么它的实现在幕后,在 CLR 内部。 ConstrainedCopy 是否执行以下操作以外的其他操作? [Reliabili
只是尝试使用 .NET 中的一些 API,我似乎找不到导致 Array.ConstrainedCopy() 失败的方法。 根据 MSDN,它被视为原子操作。如果它在复制过程中失败,整个调用将失败,导致
这里是讨论的示例代码(考虑 Reptile"is"Animal 和 Mammal“也是”Animal) Animal[] reptiles = new Reptile[] { new Rept
当我读到 Array.Copy() 不提供复制成功和事实上的保证时,我正在查看 Array.cs 的源代码甚至可能破坏原始实例(如果我在这里错了,请纠正我)。为了让您安心,ConstrainedCop
我是一名优秀的程序员,十分优秀!