Ejemplo n.º 1
0
        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);
                }
            }
        }