private unsafe static void CloneArrayContents(Array srcArray, Array dstArray) { int srcLength = srcArray.Length; fixed(int *srcFieldPtr = &srcArray.field1) { fixed(int *dstFieldPtr = &dstArray.field1) { byte *srcDataPtr = (byte *) srcArray.GetFirstElementAddress(srcFieldPtr); byte *dstDataPtr = (byte *) dstArray.GetFirstElementAddress(dstFieldPtr); byte *srcDimPtr = (byte *) srcArray.GetFirstDimInfoRectangleArray(); int dimInfoSize = (int)(srcDataPtr - srcDimPtr); int size = srcArray.vtable.arrayElementSize * srcLength; Buffer.MoveMemory(dstDataPtr - dimInfoSize, srcDataPtr - dimInfoSize, size + dimInfoSize); } } }