Array.Copy Método

Definição

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

Sobrecargas

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

Copia um intervalo de elementos de um Array a partir do índice de origem especificado e cola-os em outro Array a partir do índice de destino especificado. O tamanho 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 a partir do índice de origem especificado e cola-os em outro Array a partir do índice de destino especificado. A altura e os índices são especificados como inteiros de 32 bits.

Copy(Array, Array, Int32)

Copia um intervalo de elementos de uma Array iniciando no primeiro elemento e cola-o em outro Array, iniciando no primeiro elemento. O comprimento é especificado como um inteiro de 32 bits.

Copy(Array, Array, Int64)

Copia um intervalo de elementos de uma Array iniciando no primeiro elemento e cola-o em outro Array, iniciando no primeiro elemento. O tamanho é 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 do tipo inteiro.

using namespace System;
void PrintValues( Array^ myArr );
void main()
{
   
   // Creates and initializes a new Array instance of type Int32.
   Array^ myIntArray = Array::CreateInstance( Type::GetType(  "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 instance of type Object.
   Array^ myObjArray = Array::CreateInstance( Type::GetType(  "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(  "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 );
}

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.
 
 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
 */
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)

Copia um intervalo de elementos de um Array a partir do índice de origem especificado e cola-os em outro Array a partir do índice de destino especificado. O tamanho 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 no qual a cópia é iniciada.

destinationArray
Array

O Array que recebe os dados.

destinationIndex
Int64

Um inteiro de 64 bits que representa o índice no destinationArray no qual o armazenamento é iniciado.

length
Int64

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

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray têm classificações diferentes.

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

Pelo menos um elemento em sourceArray não 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 do sourceIndex até o final do sourceArray.

- ou -

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

Comentários

Os parâmetros sourceArray e destinationArray 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 tivesse três linhas (ou colunas) com quatro elementos cada, a cópia de seis elementos do início da matriz copiaria 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.

Caso sourceArray e destinationArray se sobreponham, este método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes de destinationArray ser substituído.

[C++]

Este método é equivalente à função padrão do C/C++ memmove, e não a memcpy.

As matrizes podem ser matrizes do tipo referência ou matrizes do tipo valor. O downcast de tipo é realizado, conforme necessário.

  • Durante a cópia de uma matriz do tipo de referência para uma matriz do tipo de valor, cada elemento é convertido e, em seguida, copiado. Durante a cópia de uma matriz do tipo de valor para uma matriz do tipo de referência, cada elemento é convertido e, em seguida, copiado.

  • Durante a cópia de uma matriz do tipo de referência ou do tipo de valor para um Object, um Object é criado para manter cada valor ou referência e, em seguida, copiá-lo. Durante a cópia de uma matriz Object para uma matriz do tipo de referência ou matriz do tipo de valor e a atribuição não é possível, InvalidCastException é lançado.

  • Caso sourceArray e destinationArray sejam matrizes do tipo de referência ou ambas as matrizes do tipo Object, uma cópia superficial é realizada. Uma cópia superficial de um Array é um novo Array contendo referências aos mesmos elementos do Arrayoriginal. Os próprios elementos ou nada referenciado pelos elementos não são copiados. Por outro lado, uma cópia em profundidade de um Array copia os elementos e tudo direta ou indiretamente referenciado pelos elementos.

Um ArrayTypeMismatchException será lançado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipo é definida da seguinte forma:

  • Um tipo é compatível com ele próprio.

  • Um tipo de valor é compatível com Object e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor só é considerado conectado a uma interface caso implemente essa interface diretamente. Os tipos desconectado não são compatíveis.

  • Dois tipos de valor intrínseco (predefinido) são compatíveis caso a cópia do tipo de fonte para o tipo de destino seja uma conversão de ampliação. Uma conversão de ampliação jamais perde informações, e uma conversão de redução pode perder informações. Por exemplo, a conversão de um inteiro assinado de 32 bits em um inteiro assinado de 64 bits é uma conversão de ampliação, e a conversão de um inteiro assinado de 64 bits em um inteiro assinado de 32 bits é uma conversão de redução. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não intrínseco (definido pelo usuário) só é compatível com ele próprio.

  • Enumerações têm uma conversão implícita em Enum e no tipo subjacente.

Caso cada elemento em sourceArray exija um downcast (por exemplo, uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não possam ser convertidos no tipo correspondente em destinationArray, InvalidCastException é lançado.

Caso esse método lance uma exceção durante a cópia, o estado de destinationArray é indefinido.

Este método é uma operação O(n), em que n é length.

Confira também

Aplica-se a

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

Copia um intervalo de elementos de um Array a partir do índice de origem especificado e cola-os em outro Array a partir do índice de destino especificado. A altura 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 no qual a cópia é iniciada.

destinationArray
Array

O Array que recebe os dados.

destinationIndex
Int32

Um inteiro de 32 bits que representa o índice no destinationArray no qual o armazenamento é iniciado.

length
Int32

Um inteiro de 32 bits que representa o número de elementos a se copiar.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray têm classificações diferentes.

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

Pelo menos um elemento em sourceArray não 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 do sourceIndex até o final do sourceArray.

- ou -

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

Comentários

Os parâmetros sourceArray e destinationArray 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 tivesse três linhas (ou colunas) com quatro elementos cada, a cópia de seis elementos do início da matriz copiaria 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.

Caso sourceArray e destinationArray se sobreponham, este método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes de destinationArray ser substituído.

[C++]

Este método é equivalente à função padrão do C/C++ memmove, e não a memcpy.

As matrizes podem ser matrizes do tipo referência ou matrizes do tipo valor. O downcast de tipo é realizado, conforme necessário.

  • Durante a cópia de uma matriz do tipo de referência para uma matriz do tipo de valor, cada elemento é convertido e, em seguida, copiado. Durante a cópia de uma matriz do tipo de valor para uma matriz do tipo de referência, cada elemento é convertido e, em seguida, copiado.

  • Durante a cópia de uma matriz do tipo de referência ou do tipo de valor para um Object, um Object é criado para manter cada valor ou referência e, em seguida, copiá-lo. Durante a cópia de uma matriz Object para uma matriz do tipo de referência ou matriz do tipo de valor e a atribuição não é possível, InvalidCastException é lançado.

  • Caso sourceArray e destinationArray sejam matrizes do tipo de referência ou ambas as matrizes do tipo Object, uma cópia superficial é realizada. Uma cópia superficial de um Array é um novo Array contendo referências aos mesmos elementos do Arrayoriginal. Os próprios elementos ou nada referenciado pelos elementos não são copiados. Por outro lado, uma cópia em profundidade de um Array copia os elementos e tudo direta ou indiretamente referenciado pelos elementos.

Um ArrayTypeMismatchException será lançado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipo é definida da seguinte forma:

  • Um tipo é compatível com ele próprio.

  • Um tipo de valor é compatível com Object e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor só é considerado conectado a uma interface caso implemente essa interface diretamente. Os tipos desconectado não são compatíveis.

  • Dois tipos de valor intrínseco (predefinido) são compatíveis caso a cópia do tipo de fonte para o tipo de destino seja uma conversão de ampliação. Uma conversão de ampliação jamais perde informações, e uma conversão de redução pode perder informações. Por exemplo, a conversão de um inteiro assinado de 32 bits em um inteiro assinado de 64 bits é uma conversão de ampliação, e a conversão de um inteiro assinado de 64 bits em um inteiro assinado de 32 bits é uma conversão de redução. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não intrínseco (definido pelo usuário) só é compatível com ele próprio.

  • Enumerações têm uma conversão implícita em Enum e no tipo subjacente.

Caso cada elemento em sourceArray exija um downcast (por exemplo, uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não possam ser convertidos no tipo correspondente em destinationArray, InvalidCastException é lançado.

Caso esse método lance uma exceção durante a cópia, o estado de destinationArray é indefinido.

Este método é uma operação O(n), em que n é length.

Confira também

Aplica-se a

Copy(Array, Array, Int32)

Copia um intervalo de elementos de uma Array iniciando no primeiro elemento e cola-o em outro Array, iniciando 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 se copiar.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray têm classificações diferentes.

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

Pelo menos um elemento em sourceArray não 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

Os parâmetros sourceArray e destinationArray 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 tivesse três linhas (ou colunas) com quatro elementos cada, a cópia de seis elementos do início da matriz copiaria todos os quatro elementos da primeira linha (ou coluna) e os dois primeiros elementos da segunda linha (ou coluna).

Caso sourceArray e destinationArray se sobreponham, este método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes de destinationArray ser substituído.

[C++]

Este método é equivalente à função padrão do C/C++ memmove, e não a memcpy.

As matrizes podem ser matrizes do tipo referência ou matrizes do tipo valor. O downcast de tipo é realizado, conforme necessário.

  • Durante a cópia de uma matriz do tipo de referência para uma matriz do tipo de valor, cada elemento é convertido e, em seguida, copiado. Durante a cópia de uma matriz do tipo de valor para uma matriz do tipo de referência, cada elemento é convertido e, em seguida, copiado.

  • Durante a cópia de uma matriz do tipo de referência ou do tipo de valor para um Object, um Object é criado para manter cada valor ou referência e, em seguida, copiá-lo. Durante a cópia de uma matriz Object para uma matriz do tipo de referência ou matriz do tipo de valor e a atribuição não é possível, InvalidCastException é lançado.

  • Caso sourceArray e destinationArray sejam matrizes do tipo de referência ou ambas as matrizes do tipo Object, uma cópia superficial é realizada. Uma cópia superficial de um Array é um novo Array contendo referências aos mesmos elementos do Arrayoriginal. Os próprios elementos ou nada referenciado pelos elementos não são copiados. Por outro lado, uma cópia em profundidade de um Array copia os elementos e tudo direta ou indiretamente referenciado pelos elementos.

Um ArrayTypeMismatchException será lançado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipo é definida da seguinte forma:

  • Um tipo é compatível com ele próprio.

  • Um tipo de valor é compatível com Object e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor só é considerado conectado a uma interface caso implemente essa interface diretamente. Os tipos desconectado não são compatíveis.

  • Dois tipos de valor intrínseco (predefinido) são compatíveis caso a cópia do tipo de fonte para o tipo de destino seja uma conversão de ampliação. Uma conversão de ampliação jamais perde informações, e uma conversão de redução pode perder informações. Por exemplo, a conversão de um inteiro assinado de 32 bits em um inteiro assinado de 64 bits é uma conversão de ampliação, e a conversão de um inteiro assinado de 64 bits em um inteiro assinado de 32 bits é uma conversão de redução. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não intrínseco (definido pelo usuário) só é compatível com ele próprio.

  • Enumerações têm uma conversão implícita em Enum e no tipo subjacente.

Caso cada elemento em sourceArray exija um downcast (por exemplo, uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não possam ser convertidos no tipo correspondente em destinationArray, InvalidCastException é lançado.

Caso esse método lance uma exceção durante a cópia, o estado de destinationArray é indefinido.

Este método é uma operação O(n), em que n é length.

Confira também

Aplica-se a

Copy(Array, Array, Int64)

Copia um intervalo de elementos de uma Array iniciando no primeiro elemento e cola-o em outro Array, iniciando no primeiro elemento. O tamanho é 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 se copiar. O inteiro deve estar entre zero e Int32.MaxValue, inclusive.

Exceções

sourceArray é null.

- ou -

destinationArray é null.

sourceArray e destinationArray têm classificações diferentes.

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

Pelo menos um elemento em sourceArray não 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

Os parâmetros sourceArray e destinationArray 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 tivesse três linhas (ou colunas) com quatro elementos cada, a cópia de seis elementos do início da matriz copiaria todos os quatro elementos da primeira linha (ou coluna) e os dois primeiros elementos da segunda linha (ou coluna).

Caso sourceArray e destinationArray se sobreponham, este método se comporta como se os valores originais de sourceArray foram preservados em um local temporário antes de destinationArray ser substituído.

[C++]

Este método é equivalente à função padrão do C/C++ memmove, e não a memcpy.

As matrizes podem ser matrizes do tipo referência ou matrizes do tipo valor. O downcast de tipo é realizado, conforme necessário.

  • Durante a cópia de uma matriz do tipo de referência para uma matriz do tipo de valor, cada elemento é convertido e, em seguida, copiado. Durante a cópia de uma matriz do tipo de valor para uma matriz do tipo de referência, cada elemento é convertido e, em seguida, copiado.

  • Durante a cópia de uma matriz do tipo de referência ou do tipo de valor para um Object, um Object é criado para manter cada valor ou referência e, em seguida, copiá-lo. Durante a cópia de uma matriz Object para uma matriz do tipo de referência ou matriz do tipo de valor e a atribuição não é possível, InvalidCastException é lançado.

  • Caso sourceArray e destinationArray sejam matrizes do tipo de referência ou ambas as matrizes do tipo Object, uma cópia superficial é realizada. Uma cópia superficial de um Array é um novo Array contendo referências aos mesmos elementos do Arrayoriginal. Os próprios elementos ou nada referenciado pelos elementos não são copiados. Por outro lado, uma cópia em profundidade de um Array copia os elementos e tudo direta ou indiretamente referenciado pelos elementos.

Um ArrayTypeMismatchException será lançado se as matrizes forem de tipos incompatíveis. A compatibilidade de tipo é definida da seguinte forma:

  • Um tipo é compatível com ele próprio.

  • Um tipo de valor é compatível com Object e com um tipo de interface implementado por esse tipo de valor. Um tipo de valor só é considerado conectado a uma interface caso implemente essa interface diretamente. Os tipos desconectado não são compatíveis.

  • Dois tipos de valor intrínseco (predefinido) são compatíveis caso a cópia do tipo de fonte para o tipo de destino seja uma conversão de ampliação. Uma conversão de ampliação jamais perde informações, e uma conversão de redução pode perder informações. Por exemplo, a conversão de um inteiro assinado de 32 bits em um inteiro assinado de 64 bits é uma conversão de ampliação, e a conversão de um inteiro assinado de 64 bits em um inteiro assinado de 32 bits é uma conversão de redução. Para obter mais informações sobre conversões, consulte Convert.

  • Um tipo de valor não intrínseco (definido pelo usuário) só é compatível com ele próprio.

  • Enumerações têm uma conversão implícita em Enum e no tipo subjacente.

Caso cada elemento em sourceArray exija um downcast (por exemplo, uma classe base para uma classe derivada ou de uma interface para um objeto) e um ou mais elementos não possam ser convertidos no tipo correspondente em destinationArray, InvalidCastException é lançado.

Caso esse método lance uma exceção durante a cópia, o estado de destinationArray é indefinido.

Este método é uma operação O(n), em que n é length.

Confira também

Aplica-se a