Array.Copy Método

Definição

Copia um intervalo de elementos de um Array para o outro Array e executa conversão de tipos e boxing conforme necessário.

Sobrecargas

Nome Description
Copy(Array, Int64, Array, Int64, Int64)

Copia um intervalo de elementos de um Array índice de origem especificado e os cola em outro Array começando no índice de destino especificado. O comprimento e os índices são especificados como inteiros de 64 bits.

Copy(Array, Int32, Array, Int32, Int32)

Copia um intervalo de elementos de um Array índice de origem especificado e os cola em outro Array começando no índice de destino especificado. O comprimento e os índices são especificados como inteiros de 32 bits.

Copy(Array, Array, Int32)

Copia um intervalo de elementos de um Array elemento inicial no primeiro elemento e os cola em outro Array começando no primeiro elemento. O comprimento é especificado como um inteiro de 32 bits.

Copy(Array, Array, Int64)

Copia um intervalo de elementos de um Array elemento inicial no primeiro elemento e os cola em outro Array começando no primeiro elemento. O comprimento é especificado como um inteiro de 64 bits.

Exemplos

O exemplo de código a seguir mostra como copiar de um Array tipo Object para outro Array de tipo inteiro.

open System

let printValues (myArr: 'a []) =
    let mutable i = 0;
    let cols = myArr.GetLength(myArr.Rank - 1)
    for item in myArr do
        if i < cols then
            i <- i + 1
        else
            printfn ""
            i <- 1
        printf $"\t{item}"
    printfn ""

 // Creates and initializes a new Array of type int.
let myIntArray = [| 1..5 |]

// Creates and initializes a new Array of type Object.
let myObjArray = Array.init 5 (fun i -> i + 26 :> obj)

// Displays the initial values of both arrays.
printfn "int array:"
printValues myIntArray 
printfn "Object array:"
printValues myObjArray

// Copies the first element from the int array to the Object array.
Array.Copy(myIntArray, myIntArray.GetLowerBound 0, myObjArray, myObjArray.GetLowerBound 0, 1)

// Copies the last two elements from the Object array to the int array.
Array.Copy(myObjArray, myObjArray.GetUpperBound 0 - 1, myIntArray, myIntArray.GetUpperBound 0 - 1, 2)

// Displays the values of the modified arrays.
printfn "int array - Last two elements should now be the same as Object array:"
printValues myIntArray 
printfn "Object array - First element should now be the same as int array:"
printValues myObjArray


// This code produces the following output.
//     int array:
//         1    2    3    4    5
//     Object array:
//         26    27    28    29    30
//     int array - Last two elements should now be the same as Object array:
//         1    2    3    29    30
//     Object array - First element should now be the same as int array:
//         1    27    28    29    30
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type int.
      Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
      for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )
         myIntArray.SetValue( i+1, i );

      // Creates and initializes a new Array of type Object.
      Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
      for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )
         myObjArray.SetValue( i+26, i );

      // Displays the initial values of both arrays.
      Console.WriteLine( "int array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array:" );
      PrintValues( myObjArray );

      // Copies the first element from the int array to the Object array.
      Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

      // Copies the last two elements from the Object array to the int array.
      Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

      // Displays the values of the modified arrays.
      Console.WriteLine( "int array - Last two elements should now be the same as Object array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array - First element should now be the same as int array:" );
      PrintValues( myObjArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

int array:
    1    2    3    4    5
Object array:
    26    27    28    29    30
int array - Last two elements should now be the same as Object array:
    1    2    3    29    30
Object array - First element should now be the same as int array:
    1    27    28    29    30
*/
Public Class SamplesArray    
    
    Public Shared Sub Main()
        
        ' Creates and initializes a new Array of type Int32.
        Dim myIntArray As Array = _
           Array.CreateInstance(GetType(System.Int32), 5)
        Dim i As Integer
        For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
            myIntArray.SetValue(i + 1, i)
        Next i 
        ' Creates and initializes a new Array of type Object.
        Dim myObjArray As Array = _
           Array.CreateInstance(GetType(System.Object), 5)
        For i = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
            myObjArray.SetValue(i + 26, i)
        Next i 
        ' Displays the initial values of both arrays.
        Console.WriteLine("Int32 array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array:")
        PrintValues(myObjArray)
        
        ' Copies the first element from the Int32 array to the Object array.
        Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, _
           myObjArray.GetLowerBound(0), 1)
        
        ' Copies the last two elements from the Object array to the Int32 array.
        Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
           myIntArray.GetUpperBound(0) - 1, 2)
        
        ' Displays the values of the modified arrays.
        Console.WriteLine("Int32 array - Last two elements should now be " _
           + "the same as Object array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array - First element should now be the " _
           + "same as Int32 array:")
        PrintValues(myObjArray)
    End Sub
    
    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
' 
' Int32 array:
'     1    2    3    4    5
' Object array:
'     26    27    28    29    30
' Int32 array - Last two elements should now be the same as Object array:
'     1    2    3    29    30
' Object array - First element should now be the same as Int32 array:
'     1    27    28    29    30

Copy(Array, Int64, Array, Int64, Int64)

Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.cs

Copia um intervalo de elementos de um Array índice de origem especificado e os cola em outro Array começando no índice de destino especificado. O comprimento e os índices são especificados como inteiros de 64 bits.

public:
 static void Copy(Array ^ sourceArray, long sourceIndex, Array ^ destinationArray, long destinationIndex, long length);
public static void Copy(Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length);
static member Copy : Array * int64 * Array * int64 * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Long, destinationArray As Array, destinationIndex As Long, length As Long)

Parâmetros

sourceArray
Array

O Array que contém os dados a serem copiados.

sourceIndex
Int64

Um inteiro de 64 bits que representa o índice no sourceArray qual a cópia começa.

destinationArray
Array

O Array que recebe os dados.

destinationIndex
Int64

Um inteiro de 64 bits que representa o índice no destinationArray qual o armazenamento começa.

length
Int64

Um inteiro de 64 bits que representa o número de elementos a serem copiados. O inteiro deve estar entre zero e Int32.MaxValue, inclusive.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray ter diferentes classificações.

sourceArray e destinationArray são de tipos incompatíveis.

Pelo menos um elemento não sourceArray pode ser convertido no tipo de destinationArray.

sourceIndex está fora do intervalo de índices válidos para o sourceArray.

- ou -

destinationIndex está fora do intervalo de índices válidos para o destinationArray.

- ou -

length é menor que 0 ou maior que Int32.MaxValue.

length é maior que o número de elementos de sourceIndex até o final de sourceArray.

- ou -

length é maior que o número de elementos de destinationIndex até o final de destinationArray.

Comentários

O sourceArray e destinationArray os parâmetros devem ter o mesmo número de dimensões. Além disso, destinationArray já deve ter sido dimensionado e deve ter um número suficiente de elementos começando da destinationIndex posição para acomodar os dados copiados.

Ao copiar entre matrizes multidimensionais, a matriz se comporta como uma matriz unidimensional longa, em que as linhas (ou colunas) são conceitualmente colocadas de ponta a ponta. Por exemplo, se uma matriz tiver três linhas (ou colunas) com quatro elementos cada, copiar seis elementos do início da matriz copiará todos os quatro elementos da primeira linha (ou coluna) e os dois primeiros elementos da segunda linha (ou coluna). Para começar a copiar do segundo elemento da terceira linha (ou coluna), sourceIndex deve ser o limite superior da primeira linha (ou coluna) mais o comprimento da segunda linha (ou coluna) mais duas.

Se sourceArray e destinationArray sobreposição, esse método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes destinationArray de ser substituído.

[C++]

Esse método é equivalente à função memmoveC/C++ padrão, não memcpy.

As matrizes podem ser matrizes de tipo de referência ou matrizes de tipo de valor. O downcasting de tipo é executado, conforme necessário.

  • Ao copiar de uma matriz de tipo de referência para uma matriz de tipo de valor, cada elemento é sem caixa e copiado. Ao copiar de uma matriz de tipo de valor para uma matriz de tipo de referência, cada elemento é colocado em caixa e copiado.

  • Ao copiar de uma matriz de tipo de referência ou de tipo de valor para uma Object matriz, um Object é criado para manter cada valor ou referência e copiado. Ao copiar de uma Object matriz para uma matriz de tipo de referência ou de tipo de valor e a atribuição não é possível, uma InvalidCastException é gerada.

  • Se sourceArray e destinationArray forem matrizes de tipo de referência ou ambas as matrizes de tipo Object, uma cópia superficial será executada. Uma cópia superficial de um Array é uma nova Array que contém referências aos mesmos elementos que o original Array. Os próprios elementos ou qualquer coisa referenciada pelos elementos não são copiados. Por outro lado, uma cópia profunda de um Array elemento copia os elementos e tudo referenciado direta ou indiretamente pelos elementos.

Um ArrayTypeMismatchException será gerado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipos é definida da seguinte maneira:

  • Um tipo é compatível consigo mesmo.

  • Um tipo de valor é compatível Object com e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor é considerado conectado a uma interface somente se ele implementar essa interface diretamente. Tipos desconectados não são compatíveis.

  • Dois tipos de valor intrínsecos (predefinidos) são compatíveis se a cópia do tipo de origem para o tipo de destino for uma conversão de ampliação. Uma conversão de ampliação nunca perde informações, enquanto uma conversão de restrição pode perder informações. Por exemplo, converter um inteiro com sinal de 32 bits em um inteiro com sinal de 64 bits é uma conversão crescente e converter um inteiro com sinal de 64 bits em um inteiro com sinal de 32 bits é uma conversão de estreitamento. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não contíguo (definido pelo usuário) é compatível apenas com ele mesmo.

  • As enumerações têm uma conversão implícita para Enum e para seu tipo subjacente.

Se cada elemento em sourceArray requer um downcast (por exemplo, de uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não podem ser convertidos no tipo correspondente, destinationArrayum InvalidCastException é gerado.

Se esse método gerar uma exceção durante a cópia, o estado será destinationArray indefinido.

Esse método é uma operação O(n), onde n está length.

Confira também

Aplica-se a

Copy(Array, Int32, Array, Int32, Int32)

Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.CoreCLR.cs
Origem:
Array.cs
Origem:
Array.cs

Copia um intervalo de elementos de um Array índice de origem especificado e os cola em outro Array começando no índice de destino especificado. O comprimento e os índices são especificados como inteiros de 32 bits.

public:
 static void Copy(Array ^ sourceArray, int sourceIndex, Array ^ destinationArray, int destinationIndex, int length);
public static void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);
static member Copy : Array * int * Array * int * int -> unit
Public Shared Sub Copy (sourceArray As Array, sourceIndex As Integer, destinationArray As Array, destinationIndex As Integer, length As Integer)

Parâmetros

sourceArray
Array

O Array que contém os dados a serem copiados.

sourceIndex
Int32

Um inteiro de 32 bits que representa o índice no sourceArray qual a cópia começa.

destinationArray
Array

O Array que recebe os dados.

destinationIndex
Int32

Um inteiro de 32 bits que representa o índice no destinationArray qual o armazenamento começa.

length
Int32

Um inteiro de 32 bits que representa o número de elementos a serem copiados.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray ter diferentes classificações.

sourceArray e destinationArray são de tipos incompatíveis.

Pelo menos um elemento não sourceArray pode ser convertido no tipo de destinationArray.

sourceIndex é menor que o limite inferior da primeira dimensão de sourceArray.

- ou -

destinationIndex é menor que o limite inferior da primeira dimensão de destinationArray.

- ou -

length é menor que zero.

length é maior que o número de elementos de sourceIndex até o final de sourceArray.

- ou -

length é maior que o número de elementos de destinationIndex até o final de destinationArray.

Comentários

O sourceArray e destinationArray os parâmetros devem ter o mesmo número de dimensões. Além disso, destinationArray já deve ter sido dimensionado e deve ter um número suficiente de elementos começando da destinationIndex posição para acomodar os dados copiados.

Ao copiar entre matrizes multidimensionais, a matriz se comporta como uma matriz unidimensional longa, em que as linhas (ou colunas) são conceitualmente colocadas de ponta a ponta. Por exemplo, se uma matriz tiver três linhas (ou colunas) com quatro elementos cada, copiar seis elementos do início da matriz copiará todos os quatro elementos da primeira linha (ou coluna) e os dois primeiros elementos da segunda linha (ou coluna). Para começar a copiar do segundo elemento da terceira linha (ou coluna), sourceIndex deve ser o limite superior da primeira linha (ou coluna) mais o comprimento da segunda linha (ou coluna) mais duas.

Se sourceArray e destinationArray sobreposição, esse método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes destinationArray de ser substituído.

[C++]

Esse método é equivalente à função memmoveC/C++ padrão, não memcpy.

As matrizes podem ser matrizes de tipo de referência ou matrizes de tipo de valor. O downcasting de tipo é executado, conforme necessário.

  • Ao copiar de uma matriz de tipo de referência para uma matriz de tipo de valor, cada elemento é sem caixa e copiado. Ao copiar de uma matriz de tipo de valor para uma matriz de tipo de referência, cada elemento é colocado em caixa e copiado.

  • Ao copiar de uma matriz de tipo de referência ou de tipo de valor para uma Object matriz, um Object é criado para manter cada valor ou referência e copiado. Ao copiar de uma Object matriz para uma matriz de tipo de referência ou de tipo de valor e a atribuição não é possível, uma InvalidCastException é gerada.

  • Se sourceArray e destinationArray forem matrizes de tipo de referência ou ambas as matrizes de tipo Object, uma cópia superficial será executada. Uma cópia superficial de um Array é uma nova Array que contém referências aos mesmos elementos que o original Array. Os próprios elementos ou qualquer coisa referenciada pelos elementos não são copiados. Por outro lado, uma cópia profunda de um Array elemento copia os elementos e tudo referenciado direta ou indiretamente pelos elementos.

Um ArrayTypeMismatchException será gerado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipos é definida da seguinte maneira:

  • Um tipo é compatível consigo mesmo.

  • Um tipo de valor é compatível Object com e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor é considerado conectado a uma interface somente se ele implementar essa interface diretamente. Tipos desconectados não são compatíveis.

  • Dois tipos de valor intrínsecos (predefinidos) são compatíveis se a cópia do tipo de origem para o tipo de destino for uma conversão de ampliação. Uma conversão de ampliação nunca perde informações, enquanto uma conversão de restrição pode perder informações. Por exemplo, converter um inteiro com sinal de 32 bits em um inteiro com sinal de 64 bits é uma conversão crescente e converter um inteiro com sinal de 64 bits em um inteiro com sinal de 32 bits é uma conversão de estreitamento. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não contíguo (definido pelo usuário) é compatível apenas com ele mesmo.

  • As enumerações têm uma conversão implícita para Enum e para seu tipo subjacente.

Se cada elemento em sourceArray requer um downcast (por exemplo, de uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não podem ser convertidos no tipo correspondente, destinationArrayum InvalidCastException é gerado.

Se esse método gerar uma exceção durante a cópia, o estado será destinationArray indefinido.

Esse método é uma operação O(n), onde n está length.

Confira também

Aplica-se a

Copy(Array, Array, Int32)

Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.CoreCLR.cs
Origem:
Array.cs
Origem:
Array.cs

Copia um intervalo de elementos de um Array elemento inicial no primeiro elemento e os cola em outro Array começando no primeiro elemento. O comprimento é especificado como um inteiro de 32 bits.

public:
 static void Copy(Array ^ sourceArray, Array ^ destinationArray, int length);
public static void Copy(Array sourceArray, Array destinationArray, int length);
static member Copy : Array * Array * int -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Integer)

Parâmetros

sourceArray
Array

O Array que contém os dados a serem copiados.

destinationArray
Array

O Array que recebe os dados.

length
Int32

Um inteiro de 32 bits que representa o número de elementos a serem copiados.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray ter diferentes classificações.

sourceArray e destinationArray são de tipos incompatíveis.

Pelo menos um elemento não sourceArray pode ser convertido no tipo de destinationArray.

length é menor que zero.

length é maior que o número de elementos em sourceArray.

- ou -

length é maior que o número de elementos em destinationArray.

Comentários

O sourceArray e destinationArray os parâmetros devem ter o mesmo número de dimensões. Além disso, destinationArray já deve ter sido dimensionado e deve ter um número suficiente de elementos para acomodar os dados copiados.

Ao copiar entre matrizes multidimensionais, a matriz se comporta como uma matriz unidimensional longa, em que as linhas (ou colunas) são conceitualmente colocadas de ponta a ponta. Por exemplo, se uma matriz tiver três linhas (ou colunas) com quatro elementos cada, copiar seis elementos do início da matriz copiará todos os quatro elementos da primeira linha (ou coluna) e os dois primeiros elementos da segunda linha (ou coluna).

Se sourceArray e destinationArray sobreposição, esse método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes destinationArray de ser substituído.

[C++]

Esse método é equivalente à função memmoveC/C++ padrão, não memcpy.

As matrizes podem ser matrizes de tipo de referência ou matrizes de tipo de valor. O downcasting de tipo é executado, conforme necessário.

  • Ao copiar de uma matriz de tipo de referência para uma matriz de tipo de valor, cada elemento é sem caixa e copiado. Ao copiar de uma matriz de tipo de valor para uma matriz de tipo de referência, cada elemento é colocado em caixa e copiado.

  • Ao copiar de uma matriz de tipo de referência ou de tipo de valor para uma Object matriz, um Object é criado para manter cada valor ou referência e copiado. Ao copiar de uma Object matriz para uma matriz de tipo de referência ou de tipo de valor e a atribuição não é possível, uma InvalidCastException é gerada.

  • Se sourceArray e destinationArray forem matrizes de tipo de referência ou ambas as matrizes de tipo Object, uma cópia superficial será executada. Uma cópia superficial de um Array é uma nova Array que contém referências aos mesmos elementos que o original Array. Os próprios elementos ou qualquer coisa referenciada pelos elementos não são copiados. Por outro lado, uma cópia profunda de um Array elemento copia os elementos e tudo referenciado direta ou indiretamente pelos elementos.

Um ArrayTypeMismatchException será gerado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipos é definida da seguinte maneira:

  • Um tipo é compatível consigo mesmo.

  • Um tipo de valor é compatível Object com e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor é considerado conectado a uma interface somente se ele implementar essa interface diretamente. Tipos desconectados não são compatíveis.

  • Dois tipos de valor intrínsecos (predefinidos) são compatíveis se a cópia do tipo de origem para o tipo de destino for uma conversão de ampliação. Uma conversão de ampliação nunca perde informações, enquanto uma conversão de restrição pode perder informações. Por exemplo, converter um inteiro com sinal de 32 bits em um inteiro com sinal de 64 bits é uma conversão crescente e converter um inteiro com sinal de 64 bits em um inteiro com sinal de 32 bits é uma conversão de estreitamento. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não contíguo (definido pelo usuário) é compatível apenas com ele mesmo.

  • As enumerações têm uma conversão implícita para Enum e para seu tipo subjacente.

Se cada elemento em sourceArray requer um downcast (por exemplo, de uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não podem ser convertidos no tipo correspondente, destinationArrayum InvalidCastException é gerado.

Se esse método gerar uma exceção durante a cópia, o estado será destinationArray indefinido.

Esse método é uma operação O(n), onde n está length.

Confira também

Aplica-se a

Copy(Array, Array, Int64)

Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.cs
Origem:
Array.cs

Copia um intervalo de elementos de um Array elemento inicial no primeiro elemento e os cola em outro Array começando no primeiro elemento. O comprimento é especificado como um inteiro de 64 bits.

public:
 static void Copy(Array ^ sourceArray, Array ^ destinationArray, long length);
public static void Copy(Array sourceArray, Array destinationArray, long length);
static member Copy : Array * Array * int64 -> unit
Public Shared Sub Copy (sourceArray As Array, destinationArray As Array, length As Long)

Parâmetros

sourceArray
Array

O Array que contém os dados a serem copiados.

destinationArray
Array

O Array que recebe os dados.

length
Int64

Um inteiro de 64 bits que representa o número de elementos a serem copiados. O inteiro deve estar entre zero e Int32.MaxValue, inclusive.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray ter diferentes classificações.

sourceArray e destinationArray são de tipos incompatíveis.

Pelo menos um elemento não sourceArray pode ser convertido no tipo de destinationArray.

length é menor que 0 ou maior que Int32.MaxValue.

length é maior que o número de elementos em sourceArray.

- ou -

length é maior que o número de elementos em destinationArray.

Comentários

O sourceArray e destinationArray os parâmetros devem ter o mesmo número de dimensões. Além disso, destinationArray já deve ter sido dimensionado e deve ter um número suficiente de elementos para acomodar os dados copiados.

Ao copiar entre matrizes multidimensionais, a matriz se comporta como uma matriz unidimensional longa, em que as linhas (ou colunas) são conceitualmente colocadas de ponta a ponta. Por exemplo, se uma matriz tiver três linhas (ou colunas) com quatro elementos cada, copiar seis elementos do início da matriz copiará todos os quatro elementos da primeira linha (ou coluna) e os dois primeiros elementos da segunda linha (ou coluna).

Se sourceArray e destinationArray sobreposição, esse método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes destinationArray de ser substituído.

[C++]

Esse método é equivalente à função memmoveC/C++ padrão, não memcpy.

As matrizes podem ser matrizes de tipo de referência ou matrizes de tipo de valor. O downcasting de tipo é executado, conforme necessário.

  • Ao copiar de uma matriz de tipo de referência para uma matriz de tipo de valor, cada elemento é sem caixa e copiado. Ao copiar de uma matriz de tipo de valor para uma matriz de tipo de referência, cada elemento é colocado em caixa e copiado.

  • Ao copiar de uma matriz de tipo de referência ou de tipo de valor para uma Object matriz, um Object é criado para manter cada valor ou referência e copiado. Ao copiar de uma Object matriz para uma matriz de tipo de referência ou de tipo de valor e a atribuição não é possível, uma InvalidCastException é gerada.

  • Se sourceArray e destinationArray forem matrizes de tipo de referência ou ambas as matrizes de tipo Object, uma cópia superficial será executada. Uma cópia superficial de um Array é uma nova Array que contém referências aos mesmos elementos que o original Array. Os próprios elementos ou qualquer coisa referenciada pelos elementos não são copiados. Por outro lado, uma cópia profunda de um Array elemento copia os elementos e tudo referenciado direta ou indiretamente pelos elementos.

Um ArrayTypeMismatchException será gerado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipos é definida da seguinte maneira:

  • Um tipo é compatível consigo mesmo.

  • Um tipo de valor é compatível Object com e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor é considerado conectado a uma interface somente se ele implementar essa interface diretamente. Tipos desconectados não são compatíveis.

  • Dois tipos de valor intrínsecos (predefinidos) são compatíveis se a cópia do tipo de origem para o tipo de destino for uma conversão de ampliação. Uma conversão de ampliação nunca perde informações, enquanto uma conversão de restrição pode perder informações. Por exemplo, converter um inteiro com sinal de 32 bits em um inteiro com sinal de 64 bits é uma conversão crescente e converter um inteiro com sinal de 64 bits em um inteiro com sinal de 32 bits é uma conversão de estreitamento. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não contíguo (definido pelo usuário) é compatível apenas com ele mesmo.

  • As enumerações têm uma conversão implícita para Enum e para seu tipo subjacente.

Se cada elemento em sourceArray requer um downcast (por exemplo, de uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não podem ser convertidos no tipo correspondente, destinationArrayum InvalidCastException é gerado.

Se esse método gerar uma exceção durante a cópia, o estado será destinationArray indefinido.

Esse método é uma operação O(n), onde n está length.

Confira também

Aplica-se a