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.

C#
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
*/

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.

C#
public static void Copy (Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length);

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

.NET 9 i inne wersje
Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

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.

C#
public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);

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

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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.

C#
public static void Copy (Array sourceArray, Array destinationArray, int length);

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

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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.

C#
public static void Copy (Array sourceArray, Array destinationArray, long length);

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

.NET 9 i inne wersje
Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1