Array.Copy Metoda

Definicja

Kopiuje do siebie Array szereg elementów Array i wykonuje rzutowanie typu i boxing zgodnie z potrzebami.

Przeciążenia

Nazwa Opis
Copy(Array, Int64, Array, Int64, Int64)

Kopiuje szereg elementów od określonego indeksu źródłowego Array i wkleja je do innego Array rozpoczynającego się 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 określonego indeksu źródłowego Array i wkleja je do innego Array rozpoczynającego się 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 , zaczynając od pierwszego elementu. Długość jest określana jako 32-bitowa liczba całkowita.

Copy(Array, Array, Int64)

Kopiuje szereg elementów od Array pierwszego elementu i wkleja je do innego Array , zaczynając od pierwszego elementu. Długość jest określana jako 64-bitowa liczba całkowita.

Przykłady

Poniższy przykład kodu przedstawia sposób kopiowania z jednego Array typu Object do innej Array liczby całkowitej typu.

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
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od określonego indeksu źródłowego Array i wkleja je do innego Array rozpoczynającego się 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 którym rozpoczyna się kopiowanie.

destinationArray
Array

Element Array odbierający dane.

destinationIndex
Int64

64-bitowa liczba całkowita reprezentująca indeks, 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

Parametr sourceArray ma wartość null.

— lub —

Parametr destinationArray ma wartość 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.

lengthjest większa niż liczba elementów z sourceIndex do końca .sourceArray

— lub —

lengthjest większa niż liczba elementów z destinationIndex do końca .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 określone kompleksowo. Jeśli na przykład tablica zawiera trzy wiersze (lub kolumny) z czterema elementami, kopiowanie sześciu elementów od początku tablicy spowoduje 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. W razie potrzeby wykonywane jest obniżanie typu.

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

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

  • Jeśli sourceArray i są zarówno tablicami typu odniesienia, jak i destinationArray są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array to nowe Array , zawierające odwołania do tych samych elementów co oryginalny Arrayelement . Elementy same lub wszystkie elementy, do których odwołuje się elementy, nie są kopiowane. Natomiast głęboka kopia Array elementu kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio, do których odwołuje się element.

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

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu implementowany przez ten typ wartości i z typem interfejsu. Typ wartości jest uznawany za połączony z interfejsem tylko wtedy, gdy implementuje ten interfejs bezpośrednio. Rozłączone typy nie są zgodne.

  • Dwa typy wartości wewnętrznych (wstępnie zdefiniowane) są zgodne, jeśli kopiowanie z typu źródłowego do typu docelowego jest konwersją rozszerzającą. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwertowanie 32-bitowej liczby całkowitej ze znakiem na 64-bitową liczbę całkowitą ze znakiem jest konwersją rozszerzającą i konwertowanie 64-bitowej liczby całkowitej ze znakiem na 32-bitową liczbę całkowitą ze znakiem jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości nonintrinsic (zdefiniowany 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 sourceArray elemecie wymaga emisji w dół (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArray, 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.cs
Źródło:
Array.cs
Źródło:
Array.CoreCLR.cs
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od określonego indeksu źródłowego Array i wkleja je do innego Array rozpoczynającego się 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 którym rozpoczyna się kopiowanie.

destinationArray
Array

Element Array odbierający dane.

destinationIndex
Int32

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

length
Int32

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

Wyjątki

Parametr sourceArray ma wartość null.

— lub —

Parametr destinationArray ma wartość 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 jest mniejsza niż dolna granica pierwszego wymiaru sourceArray.

— lub —

destinationIndex jest mniejsza niż dolna granica pierwszego wymiaru destinationArray.

— lub —

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

lengthjest większa niż liczba elementów z sourceIndex do końca .sourceArray

— lub —

lengthjest większa niż liczba elementów z destinationIndex do końca .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 określone kompleksowo. Jeśli na przykład tablica zawiera trzy wiersze (lub kolumny) z czterema elementami, kopiowanie sześciu elementów od początku tablicy spowoduje 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. W razie potrzeby wykonywane jest obniżanie typu.

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

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

  • Jeśli sourceArray i są zarówno tablicami typu odniesienia, jak i destinationArray są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array to nowe Array , zawierające odwołania do tych samych elementów co oryginalny Arrayelement . Elementy same lub wszystkie elementy, do których odwołuje się elementy, nie są kopiowane. Natomiast głęboka kopia Array elementu kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio, do których odwołuje się element.

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

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu implementowany przez ten typ wartości i z typem interfejsu. Typ wartości jest uznawany za połączony z interfejsem tylko wtedy, gdy implementuje ten interfejs bezpośrednio. Rozłączone typy nie są zgodne.

  • Dwa typy wartości wewnętrznych (wstępnie zdefiniowane) są zgodne, jeśli kopiowanie z typu źródłowego do typu docelowego jest konwersją rozszerzającą. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwertowanie 32-bitowej liczby całkowitej ze znakiem na 64-bitową liczbę całkowitą ze znakiem jest konwersją rozszerzającą i konwertowanie 64-bitowej liczby całkowitej ze znakiem na 32-bitową liczbę całkowitą ze znakiem jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości nonintrinsic (zdefiniowany 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 sourceArray elemecie wymaga emisji w dół (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArray, 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.cs
Źródło:
Array.cs
Ź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 , zaczynając od pierwszego elementu. Długość jest określana 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 odbierający dane.

length
Int32

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

Wyjątki

Parametr sourceArray ma wartość null.

— lub —

Parametr destinationArray ma wartość 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.

lengthwartość jest większa niż liczba elementów w elem.sourceArray

— lub —

lengthwartość jest większa niż liczba elementów w elem.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, 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 zawiera trzy wiersze (lub kolumny) z czterema elementami, kopiowanie sześciu elementów od początku tablicy spowoduje 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. W razie potrzeby wykonywane jest obniżanie typu.

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

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

  • Jeśli sourceArray i są zarówno tablicami typu odniesienia, jak i destinationArray są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array to nowe Array , zawierające odwołania do tych samych elementów co oryginalny Arrayelement . Elementy same lub wszystkie elementy, do których odwołuje się elementy, nie są kopiowane. Natomiast głęboka kopia Array elementu kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio, do których odwołuje się element.

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

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu implementowany przez ten typ wartości i z typem interfejsu. Typ wartości jest uznawany za połączony z interfejsem tylko wtedy, gdy implementuje ten interfejs bezpośrednio. Rozłączone typy nie są zgodne.

  • Dwa typy wartości wewnętrznych (wstępnie zdefiniowane) są zgodne, jeśli kopiowanie z typu źródłowego do typu docelowego jest konwersją rozszerzającą. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwertowanie 32-bitowej liczby całkowitej ze znakiem na 64-bitową liczbę całkowitą ze znakiem jest konwersją rozszerzającą i konwertowanie 64-bitowej liczby całkowitej ze znakiem na 32-bitową liczbę całkowitą ze znakiem jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości nonintrinsic (zdefiniowany 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 sourceArray elemecie wymaga emisji w dół (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArray, 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
Źródło:
Array.cs
Źródło:
Array.cs

Kopiuje szereg elementów od Array pierwszego elementu i wkleja je do innego Array , zaczynając od pierwszego elementu. Długość jest określana 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 odbierający 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

Parametr sourceArray ma wartość null.

— lub —

Parametr destinationArray ma wartość 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.

lengthwartość jest większa niż liczba elementów w elem.sourceArray

— lub —

lengthwartość jest większa niż liczba elementów w elem.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, 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 zawiera trzy wiersze (lub kolumny) z czterema elementami, kopiowanie sześciu elementów od początku tablicy spowoduje 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. W razie potrzeby wykonywane jest obniżanie typu.

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

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

  • Jeśli sourceArray i są zarówno tablicami typu odniesienia, jak i destinationArray są obie tablice typu Object, wykonywana jest płytkia kopia. Płytkia kopia elementu Array to nowe Array , zawierające odwołania do tych samych elementów co oryginalny Arrayelement . Elementy same lub wszystkie elementy, do których odwołuje się elementy, nie są kopiowane. Natomiast głęboka kopia Array elementu kopiuje elementy i wszystkie elementy bezpośrednio lub pośrednio, do których odwołuje się element.

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

  • Typ jest zgodny z samym sobą.

  • Typ wartości jest zgodny z Object typem interfejsu implementowany przez ten typ wartości i z typem interfejsu. Typ wartości jest uznawany za połączony z interfejsem tylko wtedy, gdy implementuje ten interfejs bezpośrednio. Rozłączone typy nie są zgodne.

  • Dwa typy wartości wewnętrznych (wstępnie zdefiniowane) są zgodne, jeśli kopiowanie z typu źródłowego do typu docelowego jest konwersją rozszerzającą. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje. Na przykład konwertowanie 32-bitowej liczby całkowitej ze znakiem na 64-bitową liczbę całkowitą ze znakiem jest konwersją rozszerzającą i konwertowanie 64-bitowej liczby całkowitej ze znakiem na 32-bitową liczbę całkowitą ze znakiem jest konwersją zawężającą. Aby uzyskać więcej informacji na temat konwersji, zobacz Convert.

  • Typ wartości nonintrinsic (zdefiniowany 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 sourceArray elemecie wymaga emisji w dół (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może być rzutowy do odpowiedniego typu w destinationArray, 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