Udostępnij za pośrednictwem


Array.Copy Metoda

Definicja

Kopiuje szereg elementów w jednym Array do drugiego Array i wykonuje rzutowanie typów i boks zgodnie z potrzebami.

Przeciążenia

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

Kopiuje szereg elementów od Array początkowego określonego indeksu źródłowego i wkleja je do innego Array , zaczynając od określonego indeksu docelowego. Długość i indeksy są określane jako 64-bitowe liczby całkowite.

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

Kopiuje szereg elementów od Array początkowego określonego indeksu źródłowego i wkleja je do innego Array , zaczynając od określonego indeksu docelowego. Długość i indeksy są określane jako 32-bitowe liczby całkowite.

Copy(Array, Array, Int32)

Kopiuje szereg elementów od Array pierwszego elementu i wkleja je do innego Array rozpoczynającego się od pierwszego elementu. Długość jest określona jako 32-bitowa liczba całkowita.

Copy(Array, Array, Int64)

Kopiuje szereg elementów od Array pierwszego elementu i wkleja je do innego Array rozpoczynającego się od pierwszego elementu. Długość jest określona jako 64-bitowa liczba całkowita.

Przykłady

W poniższym przykładzie kodu pokazano, jak skopiować jedną z Array typów Object do innej Array liczby całkowitej typu.

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)

Źródło:
Array.cs
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od Array początkowego określonego indeksu źródłowego i wkleja je do innego Array , zaczynając od określonego indeksu docelowego. Długość i indeksy są określane jako 64-bitowe liczby całkowite.

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)

Parametry

sourceArray
Array

Element Array zawierający dane do skopiowania.

sourceIndex
Int64

64-bitowa liczba całkowita reprezentująca indeks w sourceArray momencie rozpoczęcia kopiowania.

destinationArray
Array

Element Array , który odbiera dane.

destinationIndex
Int64

64-bitowa liczba całkowita reprezentująca indeks w miejscu, w destinationArray którym rozpoczyna się przechowywanie.

length
Int64

64-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania. Liczba całkowita musi należeć do zera do int32.MaxValue włącznie.

Wyjątki

sourceArray to null.

-lub-

destinationArray to null.

sourceArray i destinationArray mają różne rangi.

sourceArray i destinationArray są niezgodnymi typami.

Nie można rzutować co najmniej jednego elementu sourceArray na typ .destinationArray

sourceIndex znajduje się poza zakresem prawidłowych indeksów dla elementu sourceArray.

-lub-

destinationIndex znajduje się poza zakresem prawidłowych indeksów dla elementu destinationArray.

-lub-

length wartość jest mniejsza niż 0 lub większa niż Int32.MaxValue.

length jest większa niż liczba elementów od sourceIndex do końca elementu sourceArray.

-lub-

length jest większa niż liczba elementów od destinationIndex do końca elementu destinationArray.

Uwagi

Parametry sourceArray i destinationArray muszą mieć taką samą liczbę wymiarów. Ponadto destinationArray musi być już wymiarowany i musi mieć wystarczającą liczbę elementów rozpoczynających się od destinationIndex pozycji, aby pomieścić skopiowane dane.

Podczas kopiowania między tablicami wielowymiarowymi tablica zachowuje się jak długa tablica jednowymiarowa, w której wiersze (lub kolumny) są koncepcyjnie ułożone na końcu. Jeśli na przykład tablica ma trzy wiersze (lub kolumny) z czterema elementami, skopiowanie sześciu elementów od początku tablicy może spowodować skopiowanie wszystkich czterech elementów pierwszego wiersza (lub kolumny) i pierwszych dwóch elementów drugiego wiersza (lub kolumny). Aby rozpocząć kopiowanie z drugiego elementu trzeciego wiersza (lub kolumny), sourceIndex musi być górną granicą pierwszego wiersza (lub kolumny) plus długość drugiego wiersza (lub kolumny) plus dwa.

Jeśli sourceArray i destinationArray nakładają się na siebie, ta metoda zachowuje się tak, jakby oryginalne wartości sourceArray zostały zachowane w lokalizacji tymczasowej przed destinationArray zastąpieniem.

[C++]

Ta metoda jest równoważna standardowej funkcji memmoveC/C++, a nie memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object tworzony jest obiekt do przechowywania każdej wartości lub odwołania, a następnie kopiowany. Podczas kopiowania z Object tablicy do tablicy typu odniesienia lub tablicy typu wartości i przypisanie nie jest możliwe, InvalidCastException jest zgłaszany.

  • Jeśli sourceArray i destinationArray są tablicami typu odwołania lub są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array jest nową Array zawierającą odwołania do tych samych elementów co oryginalny Arrayelement . Nie są kopiowane same elementy ani to, co odwołuje się do elementów. Natomiast głęboka kopia Array kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio odwoływając się do elementów.

Obiekt ArrayTypeMismatchException jest zgłaszany, jeśli tablice mają niezgodne typy. Zgodność z typem jest zdefiniowana w następujący sposób:

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu i implementowany przez ten typ wartości. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs. Odłączony typy nie są zgodne.

  • Dwa typy rzeczywistej wartości wewnętrznej (wstępnie zdefiniowane) są zgodne w przypadku kopiowania z typu źródłowego na typ docelowy w konwersji rozszerzającej. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwersja 32-bitowej oznaczonej liczby całkowitej na 64-bitową jest konwersją rozszerzającą, a 64-bitowej oznaczonej liczby całkowitej na 32-bitową jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.

  • Wyliczenia mają niejawną konwersję na Enum i do ich typu bazowego.

Jeśli każdy element w elemecie sourceArray wymaga downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu) i co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArrayobiekcie , InvalidCastException jest zgłaszany.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan jest destinationArray niezdefiniowany.

Ta metoda jest operacją O(n), gdzie n to length.

Zobacz też

Dotyczy

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

Źródło:
Array.CoreCLR.cs
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od Array początkowego określonego indeksu źródłowego i wkleja je do innego Array , zaczynając od określonego indeksu docelowego. Długość i indeksy są określane jako 32-bitowe liczby całkowite.

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)

Parametry

sourceArray
Array

Element Array zawierający dane do skopiowania.

sourceIndex
Int32

32-bitowa liczba całkowita reprezentująca indeks w sourceArray momencie rozpoczęcia kopiowania.

destinationArray
Array

Element Array , który odbiera dane.

destinationIndex
Int32

32-bitowa liczba całkowita reprezentująca indeks w destinationArray miejscu, w którym rozpoczyna się przechowywanie.

length
Int32

32-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania.

Wyjątki

sourceArray to null.

-lub-

destinationArray to null.

sourceArray i destinationArray mają różne rangi.

sourceArray i destinationArray są niezgodnymi typami.

Nie można rzutować co najmniej jednego elementu sourceArray na typ .destinationArray

sourceIndexjest mniejsza niż niższa granica pierwszego wymiaru .sourceArray

-lub-

destinationIndexjest mniejsza niż niższa granica pierwszego wymiaru .destinationArray

-lub-

Parametr length ma wartość niższą niż zero.

length jest większa niż liczba elementów od sourceIndex do końca elementu sourceArray.

-lub-

length jest większa niż liczba elementów od destinationIndex do końca elementu destinationArray.

Uwagi

Parametry sourceArray i destinationArray muszą mieć taką samą liczbę wymiarów. Ponadto destinationArray musi być już wymiarowany i musi mieć wystarczającą liczbę elementów rozpoczynających się od destinationIndex pozycji, aby pomieścić skopiowane dane.

Podczas kopiowania między tablicami wielowymiarowymi tablica zachowuje się jak długa tablica jednowymiarowa, w której wiersze (lub kolumny) są koncepcyjnie ułożone na końcu. Jeśli na przykład tablica ma trzy wiersze (lub kolumny) z czterema elementami, skopiowanie sześciu elementów od początku tablicy może spowodować skopiowanie wszystkich czterech elementów pierwszego wiersza (lub kolumny) i pierwszych dwóch elementów drugiego wiersza (lub kolumny). Aby rozpocząć kopiowanie z drugiego elementu trzeciego wiersza (lub kolumny), sourceIndex musi być górną granicą pierwszego wiersza (lub kolumny) plus długość drugiego wiersza (lub kolumny) plus dwa.

Jeśli sourceArray i destinationArray nakładają się na siebie, ta metoda zachowuje się tak, jakby oryginalne wartości sourceArray zostały zachowane w lokalizacji tymczasowej przed destinationArray zastąpieniem.

[C++]

Ta metoda jest równoważna standardowej funkcji memmoveC/C++, a nie memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object tworzony jest obiekt do przechowywania każdej wartości lub odwołania, a następnie kopiowany. Podczas kopiowania z Object tablicy do tablicy typu odniesienia lub tablicy typu wartości i przypisanie nie jest możliwe, InvalidCastException jest zgłaszany.

  • Jeśli sourceArray i destinationArray są tablicami typu odwołania lub są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array jest nową Array zawierającą odwołania do tych samych elementów co oryginalny Arrayelement . Nie są kopiowane same elementy ani to, co odwołuje się do elementów. Natomiast głęboka kopia Array kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio odwoływając się do elementów.

Obiekt ArrayTypeMismatchException jest zgłaszany, jeśli tablice mają niezgodne typy. Zgodność z typem jest zdefiniowana w następujący sposób:

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu i implementowany przez ten typ wartości. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs. Odłączony typy nie są zgodne.

  • Dwa typy rzeczywistej wartości wewnętrznej (wstępnie zdefiniowane) są zgodne w przypadku kopiowania z typu źródłowego na typ docelowy w konwersji rozszerzającej. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwersja 32-bitowej oznaczonej liczby całkowitej na 64-bitową jest konwersją rozszerzającą, a 64-bitowej oznaczonej liczby całkowitej na 32-bitową jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.

  • Wyliczenia mają niejawną konwersję na Enum i do ich typu bazowego.

Jeśli każdy element w elemecie sourceArray wymaga downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu) i co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArrayobiekcie , InvalidCastException jest zgłaszany.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan jest destinationArray niezdefiniowany.

Ta metoda jest operacją O(n), gdzie n to length.

Zobacz też

Dotyczy

Copy(Array, Array, Int32)

Źródło:
Array.CoreCLR.cs
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od Array pierwszego elementu i wkleja je do innego Array rozpoczynającego się od pierwszego elementu. Długość jest określona jako 32-bitowa liczba całkowita.

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)

Parametry

sourceArray
Array

Element Array zawierający dane do skopiowania.

destinationArray
Array

Element Array , który odbiera dane.

length
Int32

32-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania.

Wyjątki

sourceArray to null.

-lub-

destinationArray to null.

sourceArray i destinationArray mają różne rangi.

sourceArray i destinationArray są niezgodnymi typami.

Nie można rzutować co najmniej jednego elementu sourceArray na typ .destinationArray

Parametr length ma wartość niższą niż zero.

length jest większa niż liczba elementów w sourceArrayelemecie .

-lub-

length jest większa niż liczba elementów w destinationArrayelemecie .

Uwagi

Parametry sourceArray i destinationArray muszą mieć taką samą liczbę wymiarów. Ponadto destinationArray musi być już wymiarowany i musi mieć wystarczającą liczbę elementów, aby pomieścić skopiowane dane.

Podczas kopiowania między tablicami wielowymiarowymi tablica zachowuje się jak długa tablica jednowymiarowa, gdzie wiersze (lub kolumny) są koncepcyjnie ułożone na końcu. Jeśli na przykład tablica ma trzy wiersze (lub kolumny) z czterema elementami, skopiowanie sześciu elementów od początku tablicy może spowodować skopiowanie wszystkich czterech elementów pierwszego wiersza (lub kolumny) i pierwszych dwóch elementów drugiego wiersza (lub kolumny).

Jeśli sourceArray i destinationArray nakładają się na siebie, ta metoda zachowuje się tak, jakby oryginalne wartości sourceArray zostały zachowane w lokalizacji tymczasowej przed destinationArray zastąpieniem.

[C++]

Ta metoda jest równoważna standardowej funkcji memmoveC/C++, a nie memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object tworzony jest obiekt do przechowywania każdej wartości lub odwołania, a następnie kopiowany. Podczas kopiowania z Object tablicy do tablicy typu odniesienia lub tablicy typu wartości i przypisanie nie jest możliwe, InvalidCastException jest zgłaszany.

  • Jeśli sourceArray i destinationArray są tablicami typu odwołania lub są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array jest nową Array zawierającą odwołania do tych samych elementów co oryginalny Arrayelement . Nie są kopiowane same elementy ani to, co odwołuje się do elementów. Natomiast głęboka kopia Array kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio odwoływając się do elementów.

Obiekt ArrayTypeMismatchException jest zgłaszany, jeśli tablice mają niezgodne typy. Zgodność z typem jest zdefiniowana w następujący sposób:

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu i implementowany przez ten typ wartości. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs. Odłączony typy nie są zgodne.

  • Dwa typy rzeczywistej wartości wewnętrznej (wstępnie zdefiniowane) są zgodne w przypadku kopiowania z typu źródłowego na typ docelowy w konwersji rozszerzającej. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwersja 32-bitowej oznaczonej liczby całkowitej na 64-bitową jest konwersją rozszerzającą, a 64-bitowej oznaczonej liczby całkowitej na 32-bitową jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.

  • Wyliczenia mają niejawną konwersję na Enum i do ich typu bazowego.

Jeśli każdy element w elemecie sourceArray wymaga downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu) i co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArrayobiekcie , InvalidCastException jest zgłaszany.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan jest destinationArray niezdefiniowany.

Ta metoda jest operacją O(n), gdzie n to length.

Zobacz też

Dotyczy

Copy(Array, Array, Int64)

Źródło:
Array.cs
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od Array pierwszego elementu i wkleja je do innego Array rozpoczynającego się od pierwszego elementu. Długość jest określona jako 64-bitowa liczba całkowita.

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)

Parametry

sourceArray
Array

Element Array zawierający dane do skopiowania.

destinationArray
Array

Element Array , który odbiera dane.

length
Int64

64-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania. Liczba całkowita musi należeć do zera do int32.MaxValue włącznie.

Wyjątki

sourceArray to null.

-lub-

destinationArray to null.

sourceArray i destinationArray mają różne rangi.

sourceArray i destinationArray są niezgodnymi typami.

Nie można rzutować co najmniej jednego elementu sourceArray na typ .destinationArray

length wartość jest mniejsza niż 0 lub większa niż Int32.MaxValue.

length jest większa niż liczba elementów w sourceArrayelemecie .

-lub-

length jest większa niż liczba elementów w destinationArrayelemecie .

Uwagi

Parametry sourceArray i destinationArray muszą mieć taką samą liczbę wymiarów. Ponadto destinationArray musi być już wymiarowany i musi mieć wystarczającą liczbę elementów, aby pomieścić skopiowane dane.

Podczas kopiowania między tablicami wielowymiarowymi tablica zachowuje się jak długa tablica jednowymiarowa, gdzie wiersze (lub kolumny) są koncepcyjnie ułożone na końcu. Jeśli na przykład tablica ma trzy wiersze (lub kolumny) z czterema elementami, skopiowanie sześciu elementów od początku tablicy może spowodować skopiowanie wszystkich czterech elementów pierwszego wiersza (lub kolumny) i pierwszych dwóch elementów drugiego wiersza (lub kolumny).

Jeśli sourceArray i destinationArray nakładają się na siebie, ta metoda zachowuje się tak, jakby oryginalne wartości sourceArray zostały zachowane w lokalizacji tymczasowej przed destinationArray zastąpieniem.

[C++]

Ta metoda jest równoważna standardowej funkcji memmoveC/C++, a nie memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object tworzony jest obiekt do przechowywania każdej wartości lub odwołania, a następnie kopiowany. Podczas kopiowania z Object tablicy do tablicy typu odniesienia lub tablicy typu wartości i przypisanie nie jest możliwe, InvalidCastException jest zgłaszany.

  • Jeśli sourceArray i destinationArray są tablicami typu odwołania lub są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array jest nową Array zawierającą odwołania do tych samych elementów co oryginalny Arrayelement . Nie są kopiowane same elementy ani to, co odwołuje się do elementów. Natomiast głęboka kopia Array kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio odwoływając się do elementów.

Obiekt ArrayTypeMismatchException jest zgłaszany, jeśli tablice mają niezgodne typy. Zgodność z typem jest zdefiniowana w następujący sposób:

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu i implementowany przez ten typ wartości. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs. Odłączony typy nie są zgodne.

  • Dwa typy rzeczywistej wartości wewnętrznej (wstępnie zdefiniowane) są zgodne w przypadku kopiowania z typu źródłowego na typ docelowy w konwersji rozszerzającej. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwersja 32-bitowej oznaczonej liczby całkowitej na 64-bitową jest konwersją rozszerzającą, a 64-bitowej oznaczonej liczby całkowitej na 32-bitową jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.

  • Wyliczenia mają niejawną konwersję na Enum i do ich typu bazowego.

Jeśli każdy element w elemecie sourceArray wymaga downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu) i co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArrayobiekcie , InvalidCastException jest zgłaszany.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan jest destinationArray niezdefiniowany.

Ta metoda jest operacją O(n), gdzie n to length.

Zobacz też

Dotyczy