我一直在研究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 代码中?