Array.Copy Array.Copy Array.Copy Array.Copy Method

Definicja

Kopiuje zakres elementów w jeden Array do drugiego Array i wykonuje rzutowanie typu i opakowanie zgodnie z wymaganiami.Copies a range of elements in one Array to another Array and performs type casting and boxing as required.

Przeciążenia

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

Kopiuje zakres elementów z elementu Array rozpoczynającego się od określonego indeksu źródłowego i wkleja je do innego Array , rozpoczynając od określonego indeksu docelowego.Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. Długość i indeksy są określone jako 64-bitowe liczby całkowite.The length and the indexes are specified as 64-bit integers.

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

Kopiuje zakres elementów z elementu Array rozpoczynającego się od określonego indeksu źródłowego i wkleja je do innego Array , rozpoczynając od określonego indeksu docelowego.Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. Długość i indeksy są określone jako 32-bitowe liczby całkowite.The length and the indexes are specified as 32-bit integers.

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

Kopiuje zakres elementów od Array początku pierwszego elementu i wkleja je do innego Array , zaczynając od pierwszego elementu.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Długość jest określana jako 64-bitowa liczba całkowita.The length is specified as a 64-bit integer.

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

Kopiuje zakres elementów od Array początku pierwszego elementu i wkleja je do innego Array , zaczynając od pierwszego elementu.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Długość jest określana jako 32-bitowa liczba całkowita.The length is specified as a 32-bit integer.

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

Kopiuje zakres elementów z elementu Array rozpoczynającego się od określonego indeksu źródłowego i wkleja je do innego Array , rozpoczynając od określonego indeksu docelowego.Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. Długość i indeksy są określone jako 64-bitowe liczby całkowite.The length and the indexes are specified as 64-bit integers.

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 Array Array Array

Array Zawiera dane do skopiowania.The Array that contains the data to copy.

sourceIndex
Int64 Int64 Int64 Int64

64-bitowa liczba całkowita reprezentująca indeks, w sourceArray którym rozpoczyna się kopiowanie.A 64-bit integer that represents the index in the sourceArray at which copying begins.

destinationArray
Array Array Array Array

Array , Który odbiera dane.The Array that receives the data.

destinationIndex
Int64 Int64 Int64 Int64

64-bitowa liczba całkowita reprezentująca indeks, w destinationArray którym rozpoczyna się przechowywanie.A 64-bit integer that represents the index in the destinationArray at which storing begins.

length
Int64 Int64 Int64 Int64

64-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania.A 64-bit integer that represents the number of elements to copy. Liczba całkowita musi należeć do zakresu MaxValueod zera do włącznie.The integer must be between zero and MaxValue, inclusive.

Wyjątki

sourceArrayjest null.sourceArray is null.

—lub—-or- destinationArrayjest null.destinationArray is null.

sourceArrayi destinationArray mają różne Range.sourceArray and destinationArray have different ranks.

sourceArrayi destinationArray mają niezgodne typy.sourceArray and destinationArray are of incompatible types.

Co najmniej jeden element w sourceArray nie może być rzutowany na destinationArraytyp.At least one element in sourceArray cannot be cast to the type of destinationArray.

sourceIndexznajduje się poza zakresem prawidłowych indeksów dla sourceArray.sourceIndex is outside the range of valid indexes for the sourceArray.

—lub—-or- destinationIndexznajduje się poza zakresem prawidłowych indeksów dla destinationArray.destinationIndex is outside the range of valid indexes for the destinationArray.

—lub—-or- lengthjest mniejsza niż 0 lub większa niż MaxValue.length is less than 0 or greater than MaxValue.

lengthjest większa niż liczba elementów od sourceIndex do sourceArraykońca.length is greater than the number of elements from sourceIndex to the end of sourceArray.

—lub—-or- lengthjest większa niż liczba elementów od destinationIndex do destinationArraykońca.length is greater than the number of elements from destinationIndex to the end of destinationArray.

Przykłady

Poniższy przykład kodu pokazuje, jak skopiować z jednego Array typu Object do innego Array typu Integer.The following code example shows how to copy from one Array of type Object to another Array of type integer.

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
 */
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type Int32.
      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( "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 );
   }


   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.

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

Uwagi

Parametry sourceArray idestinationArray muszą mieć taką samą liczbę wymiarów.The sourceArray and destinationArray parameters must have the same number of dimensions. Ponadto, destinationArray musi być już zwymiarowane i muszą mieć wystarczającą liczbę elementów rozpoczynając destinationIndex od pozycji, aby pomieścić skopiowane dane.In addition, destinationArray must already have been dimensioned and must have a sufficient number of elements starting from the destinationIndex position to accommodate the copied data.

Podczas kopiowania między tablicami wielowymiarowymi, tablica zachowuje się jak długa tablica Jednowymiarowa, gdzie wiersze (lub kolumny) są koncepcyjnie określane jako kompleksowe.When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end-to-end. 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).For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column). Aby rozpocząć kopiowanie z drugiego elementu trzeciego wiersza (lub kolumny), musi to być sourceIndex Górna granica pierwszego wiersza (lub kolumny), a także długość drugiego wiersza (lub kolumny) i dwóch.To start copying from the second element of the third row (or column), sourceIndex must be the upper bound of the first row (or column) plus the length of the second row (or column) plus two.

Jeśli sourceArray sourceArray destinationArray i destinationArray nakładają się, ta metoda zachowuje się tak, jakby oryginalne wartości zostały zachowane w tymczasowej lokalizacji przed zastąpieniem.If sourceArray and destinationArray overlap, this method behaves as if the original values of sourceArray were preserved in a temporary location before destinationArray is overwritten.

[C++][C++]

Ta metoda jest równoważna z standardową funkcjąC++ memmoveC/, memcpya nie.This method is equivalent to the standard C/C++ function memmove, not memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości.The arrays can be reference-type arrays or value-type arrays. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.Type downcasting is performed, as required.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.When copying from a value-type array to a reference-type array, each element is boxed and then copied.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object , jest tworzona do przechowywania każdej wartości lub odwołania, a następnie skopiowana.When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. Podczas kopiowania z Object tablicy do tablicy typu odwołania lub typu wartości, a przypisanie nie jest możliwe InvalidCastException , zostanie zgłoszony.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Jeśli sourceArray Objecti destinationArray są tablicami typu odwołania lub są tablicami typu, wykonywana jest kopia na płytki.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Kopia Array skrócona programu jest nowym Array zawierającym odwołania do tych samych elementów jak oryginał Array.A shallow copy of an Array is a new Array containing references to the same elements as the original Array. Nie są kopiowane same elementy ani to, co odwołuje się do elementów.The elements themselves or anything referenced by the elements are not copied. Z kolei Szczegółowa kopia elementu Array Kopiuje elementy i wszystko, bezpośrednio lub pośrednio odwołujące się do elementów.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

ArrayTypeMismatchException Jest zgłaszany, jeśli tablice mają niezgodne typy.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Zgodność z typem jest zdefiniowana w następujący sposób:Type compatibility is defined as follows:

  • Typ jest zgodny z samym sobą.A type is compatible with itself.

  • Typ wartości jest zgodny z Object i z typem interfejsu zaimplementowanym przez ten typ wartości.A value type is compatible with Object and with an interface type implemented by that value type. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs.A value type is considered connected to an interface only if it implements that interface directly. Odłączony typy nie są zgodne.Disconnected types are not compatible.

  • 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.Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje.A widening conversion never loses information, whereas a narrowing conversion can lose information. 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ą.For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. Aby uzyskać więcej informacji na temat konwersji Convert, zobacz.For more information about conversions, see Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Wyliczenia mają niejawną konwersję Enum na i ich typ podstawowy.Enumerations have an implicit conversion to Enum and to their underlying type.

Jeśli każdy element w sourceArray wymaga elementu downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może zostać rzutowany do odpowiedniego typu w destinationArray, InvalidCastException zostanie zgłoszony.If every element in sourceArray requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray, an InvalidCastException is thrown.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan destinationArray jest niezdefiniowany.If this method throws an exception while copying, the state of destinationArray is undefined.

Ta metoda jest operacją on(), gdzie n is length.This method is an O(n) operation, where n is length.

Zobacz też

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

Kopiuje zakres elementów z elementu Array rozpoczynającego się od określonego indeksu źródłowego i wkleja je do innego Array , rozpoczynając od określonego indeksu docelowego.Copies a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. Długość i indeksy są określone jako 32-bitowe liczby całkowite.The length and the indexes are specified as 32-bit integers.

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 Array Array Array

Array Zawiera dane do skopiowania.The Array that contains the data to copy.

sourceIndex
Int32 Int32 Int32 Int32

32-bitowa liczba całkowita reprezentująca indeks, w sourceArray którym rozpoczyna się kopiowanie.A 32-bit integer that represents the index in the sourceArray at which copying begins.

destinationArray
Array Array Array Array

Array , Który odbiera dane.The Array that receives the data.

destinationIndex
Int32 Int32 Int32 Int32

32-bitowa liczba całkowita reprezentująca indeks, w destinationArray którym rozpoczyna się przechowywanie.A 32-bit integer that represents the index in the destinationArray at which storing begins.

length
Int32 Int32 Int32 Int32

32-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania.A 32-bit integer that represents the number of elements to copy.

Wyjątki

sourceArrayjest null.sourceArray is null.

—lub—-or- destinationArrayjest null.destinationArray is null.

sourceArrayi destinationArray mają różne Range.sourceArray and destinationArray have different ranks.

sourceArrayi destinationArray mają niezgodne typy.sourceArray and destinationArray are of incompatible types.

Co najmniej jeden element w sourceArray nie może być rzutowany na destinationArraytyp.At least one element in sourceArray cannot be cast to the type of destinationArray.

sourceIndexjest mniejsza niż Dolna granica pierwszego wymiaru sourceArray.sourceIndex is less than the lower bound of the first dimension of sourceArray.

—lub—-or- destinationIndexjest mniejsza niż Dolna granica pierwszego wymiaru destinationArray.destinationIndex is less than the lower bound of the first dimension of destinationArray.

—lub—-or- lengthjest mniejsza od zera.length is less than zero.

lengthjest większa niż liczba elementów od sourceIndex do sourceArraykońca.length is greater than the number of elements from sourceIndex to the end of sourceArray.

—lub—-or- lengthjest większa niż liczba elementów od destinationIndex do destinationArraykońca.length is greater than the number of elements from destinationIndex to the end of destinationArray.

Przykłady

Poniższy przykład kodu pokazuje, jak skopiować z jednego Array typu Object do innego Array typu Integer.The following code example shows how to copy from one Array of type Object to another Array of type integer.

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
 */
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type Int32.
      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( "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 );
   }


   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.

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

Uwagi

Parametry sourceArray idestinationArray muszą mieć taką samą liczbę wymiarów.The sourceArray and destinationArray parameters must have the same number of dimensions. Ponadto, destinationArray musi być już zwymiarowane i muszą mieć wystarczającą liczbę elementów rozpoczynając destinationIndex od pozycji, aby pomieścić skopiowane dane.In addition, destinationArray must already have been dimensioned and must have a sufficient number of elements starting from the destinationIndex position to accommodate the copied data.

Podczas kopiowania między tablicami wielowymiarowymi, tablica zachowuje się jak długa tablica Jednowymiarowa, gdzie wiersze (lub kolumny) są koncepcyjnie określane jako kompleksowe.When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end-to-end. 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).For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column). Aby rozpocząć kopiowanie z drugiego elementu trzeciego wiersza (lub kolumny), musi to być sourceIndex Górna granica pierwszego wiersza (lub kolumny), a także długość drugiego wiersza (lub kolumny) i dwóch.To start copying from the second element of the third row (or column), sourceIndex must be the upper bound of the first row (or column) plus the length of the second row (or column) plus two.

Jeśli sourceArray sourceArray destinationArray i destinationArray nakładają się, ta metoda zachowuje się tak, jakby oryginalne wartości zostały zachowane w tymczasowej lokalizacji przed zastąpieniem.If sourceArray and destinationArray overlap, this method behaves as if the original values of sourceArray were preserved in a temporary location before destinationArray is overwritten.

[C++][C++]

Ta metoda jest równoważna z standardową funkcjąC++ memmoveC/, memcpya nie.This method is equivalent to the standard C/C++ function memmove, not memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości.The arrays can be reference-type arrays or value-type arrays. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.Type downcasting is performed, as required.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.When copying from a value-type array to a reference-type array, each element is boxed and then copied.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object , jest tworzona do przechowywania każdej wartości lub odwołania, a następnie skopiowana.When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. Podczas kopiowania z Object tablicy do tablicy typu odwołania lub typu wartości, a przypisanie nie jest możliwe InvalidCastException , zostanie zgłoszony.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Jeśli sourceArray Objecti destinationArray są tablicami typu odwołania lub są tablicami typu, wykonywana jest kopia na płytki.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Kopia Array skrócona programu jest nowym Array zawierającym odwołania do tych samych elementów jak oryginał Array.A shallow copy of an Array is a new Array containing references to the same elements as the original Array. Nie są kopiowane same elementy ani to, co odwołuje się do elementów.The elements themselves or anything referenced by the elements are not copied. Z kolei Szczegółowa kopia elementu Array Kopiuje elementy i wszystko, bezpośrednio lub pośrednio odwołujące się do elementów.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

ArrayTypeMismatchException Jest zgłaszany, jeśli tablice mają niezgodne typy.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Zgodność z typem jest zdefiniowana w następujący sposób:Type compatibility is defined as follows:

  • Typ jest zgodny z samym sobą.A type is compatible with itself.

  • Typ wartości jest zgodny z Object i z typem interfejsu zaimplementowanym przez ten typ wartości.A value type is compatible with Object and with an interface type implemented by that value type. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs.A value type is considered connected to an interface only if it implements that interface directly. Odłączony typy nie są zgodne.Disconnected types are not compatible.

  • 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.Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje.A widening conversion never loses information, whereas a narrowing conversion can lose information. 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ą.For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. Aby uzyskać więcej informacji na temat konwersji Convert, zobacz.For more information about conversions, see Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Wyliczenia mają niejawną konwersję Enum na i ich typ podstawowy.Enumerations have an implicit conversion to Enum and to their underlying type.

Jeśli każdy element w sourceArray wymaga elementu downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może zostać rzutowany do odpowiedniego typu w destinationArray, InvalidCastException zostanie zgłoszony.If every element in sourceArray requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray, an InvalidCastException is thrown.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan destinationArray jest niezdefiniowany.If this method throws an exception while copying, the state of destinationArray is undefined.

Ta metoda jest operacją on(), gdzie n is length.This method is an O(n) operation, where n is length.

Zobacz też

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

Kopiuje zakres elementów od Array początku pierwszego elementu i wkleja je do innego Array , zaczynając od pierwszego elementu.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Długość jest określana jako 64-bitowa liczba całkowita.The length is specified as a 64-bit integer.

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 Array Array Array

Array Zawiera dane do skopiowania.The Array that contains the data to copy.

destinationArray
Array Array Array Array

Array , Który odbiera dane.The Array that receives the data.

length
Int64 Int64 Int64 Int64

64-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania.A 64-bit integer that represents the number of elements to copy. Liczba całkowita musi należeć do zakresu MaxValueod zera do włącznie.The integer must be between zero and MaxValue, inclusive.

Wyjątki

sourceArrayjest null.sourceArray is null.

—lub—-or- destinationArrayjest null.destinationArray is null.

sourceArrayi destinationArray mają różne Range.sourceArray and destinationArray have different ranks.

sourceArrayi destinationArray mają niezgodne typy.sourceArray and destinationArray are of incompatible types.

Co najmniej jeden element w sourceArray nie może być rzutowany na destinationArraytyp.At least one element in sourceArray cannot be cast to the type of destinationArray.

lengthjest mniejsza niż 0 lub większa niż MaxValue.length is less than 0 or greater than MaxValue.

lengthjest większa niż liczba elementów w sourceArray.length is greater than the number of elements in sourceArray.

—lub—-or- lengthjest większa niż liczba elementów w destinationArray.length is greater than the number of elements in destinationArray.

Uwagi

Parametry sourceArray idestinationArray muszą mieć taką samą liczbę wymiarów.The sourceArray and destinationArray parameters must have the same number of dimensions. Ponadto, destinationArray należy już mieć wymiar i musi mieć wystarczającą liczbę elementów, aby pomieścić skopiowane dane.In addition, destinationArray must already have been dimensioned and must have a sufficient number of elements to accommodate the copied data.

Podczas kopiowania między tablicami wielowymiarowymi tablica zachowuje się jak długa tablica Jednowymiarowa, w której te wiersze (lub kolumny) są koncepcyjnie ustalone na końcu.When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end to end. 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).For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column).

Jeśli sourceArray sourceArray destinationArray i destinationArray nakładają się, ta metoda zachowuje się tak, jakby oryginalne wartości zostały zachowane w tymczasowej lokalizacji przed zastąpieniem.If sourceArray and destinationArray overlap, this method behaves as if the original values of sourceArray were preserved in a temporary location before destinationArray is overwritten.

[C++][C++]

Ta metoda jest równoważna z standardową funkcjąC++ memmoveC/, memcpya nie.This method is equivalent to the standard C/C++ function memmove, not memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości.The arrays can be reference-type arrays or value-type arrays. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.Type downcasting is performed, as required.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.When copying from a value-type array to a reference-type array, each element is boxed and then copied.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object , jest tworzona do przechowywania każdej wartości lub odwołania, a następnie skopiowana.When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. Podczas kopiowania z Object tablicy do tablicy typu odwołania lub typu wartości, a przypisanie nie jest możliwe InvalidCastException , zostanie zgłoszony.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Jeśli sourceArray Objecti destinationArray są tablicami typu odwołania lub są tablicami typu, wykonywana jest kopia na płytki.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Kopia Array skrócona programu jest nowym Array zawierającym odwołania do tych samych elementów jak oryginał Array.A shallow copy of an Array is a new Array containing references to the same elements as the original Array. Nie są kopiowane same elementy ani to, co odwołuje się do elementów.The elements themselves or anything referenced by the elements are not copied. Z kolei Szczegółowa kopia elementu Array Kopiuje elementy i wszystko, bezpośrednio lub pośrednio odwołujące się do elementów.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

ArrayTypeMismatchException Jest zgłaszany, jeśli tablice mają niezgodne typy.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Zgodność z typem jest zdefiniowana w następujący sposób:Type compatibility is defined as follows:

  • Typ jest zgodny z samym sobą.A type is compatible with itself.

  • Typ wartości jest zgodny z Object i z typem interfejsu zaimplementowanym przez ten typ wartości.A value type is compatible with Object and with an interface type implemented by that value type. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs.A value type is considered connected to an interface only if it implements that interface directly. Odłączony typy nie są zgodne.Disconnected types are not compatible.

  • 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.Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje.A widening conversion never loses information, whereas a narrowing conversion can lose information. 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ą.For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. Aby uzyskać więcej informacji na temat konwersji Convert, zobacz.For more information about conversions, see Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Wyliczenia mają niejawną konwersję Enum na i ich typ podstawowy.Enumerations have an implicit conversion to Enum and to their underlying type.

Jeśli każdy element w sourceArray wymaga elementu downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może zostać rzutowany do odpowiedniego typu w destinationArray, InvalidCastException zostanie zgłoszony.If every element in sourceArray requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray, an InvalidCastException is thrown.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan destinationArray jest niezdefiniowany.If this method throws an exception while copying, the state of destinationArray is undefined.

Ta metoda jest operacją on(), gdzie n is length.This method is an O(n) operation, where n is length.

Zobacz też

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

Kopiuje zakres elementów od Array początku pierwszego elementu i wkleja je do innego Array , zaczynając od pierwszego elementu.Copies a range of elements from an Array starting at the first element and pastes them into another Array starting at the first element. Długość jest określana jako 32-bitowa liczba całkowita.The length is specified as a 32-bit integer.

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 Array Array Array

Array Zawiera dane do skopiowania.The Array that contains the data to copy.

destinationArray
Array Array Array Array

Array , Który odbiera dane.The Array that receives the data.

length
Int32 Int32 Int32 Int32

32-bitowa liczba całkowita reprezentująca liczbę elementów do skopiowania.A 32-bit integer that represents the number of elements to copy.

Wyjątki

sourceArrayjest null.sourceArray is null.

—lub—-or- destinationArrayjest null.destinationArray is null.

sourceArrayi destinationArray mają różne Range.sourceArray and destinationArray have different ranks.

sourceArrayi destinationArray mają niezgodne typy.sourceArray and destinationArray are of incompatible types.

Co najmniej jeden element w sourceArray nie może być rzutowany na destinationArraytyp.At least one element in sourceArray cannot be cast to the type of destinationArray.

lengthjest większa niż liczba elementów w sourceArray.length is greater than the number of elements in sourceArray.

—lub—-or- lengthjest większa niż liczba elementów w destinationArray.length is greater than the number of elements in destinationArray.

Uwagi

Parametry sourceArray idestinationArray muszą mieć taką samą liczbę wymiarów.The sourceArray and destinationArray parameters must have the same number of dimensions. Ponadto, destinationArray należy już mieć wymiar i musi mieć wystarczającą liczbę elementów, aby pomieścić skopiowane dane.In addition, destinationArray must already have been dimensioned and must have a sufficient number of elements to accommodate the copied data.

Podczas kopiowania między tablicami wielowymiarowymi tablica zachowuje się jak długa tablica Jednowymiarowa, w której te wiersze (lub kolumny) są koncepcyjnie ustalone na końcu.When copying between multidimensional arrays, the array behaves like a long one-dimensional array, where the rows (or columns) are conceptually laid end to end. 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).For example, if an array has three rows (or columns) with four elements each, copying six elements from the beginning of the array would copy all four elements of the first row (or column) and the first two elements of the second row (or column).

Jeśli sourceArray sourceArray destinationArray i destinationArray nakładają się, ta metoda zachowuje się tak, jakby oryginalne wartości zostały zachowane w tymczasowej lokalizacji przed zastąpieniem.If sourceArray and destinationArray overlap, this method behaves as if the original values of sourceArray were preserved in a temporary location before destinationArray is overwritten.

[C++][C++]

Ta metoda jest równoważna z standardową funkcjąC++ memmoveC/, memcpya nie.This method is equivalent to the standard C/C++ function memmove, not memcpy.

Tablice mogą być tablicami typu odwołania lub tablicami typu wartości.The arrays can be reference-type arrays or value-type arrays. Rzutowanie typu w dół jest wykonywane odpowiednio do potrzeb.Type downcasting is performed, as required.

  • Podczas kopiowania z tablicy typu odwołania do tablicy typu wartości każdy element jest rozpakowywany, a następnie kopiowany.When copying from a reference-type array to a value-type array, each element is unboxed and then copied. Podczas kopiowania z tablicy wartości typu do tablicy typu odwołania każdy element jest pakowany, a następnie kopiowany.When copying from a value-type array to a reference-type array, each element is boxed and then copied.

  • Podczas kopiowania z tablicy typu odwołania lub typu wartości do Object tablicy Object , jest tworzona do przechowywania każdej wartości lub odwołania, a następnie skopiowana.When copying from a reference-type or value-type array to an Object array, an Object is created to hold each value or reference and then copied. Podczas kopiowania z Object tablicy do tablicy typu odwołania lub typu wartości, a przypisanie nie jest możliwe InvalidCastException , zostanie zgłoszony.When copying from an Object array to a reference-type or value-type array and the assignment is not possible, an InvalidCastException is thrown.

  • Jeśli sourceArray Objecti destinationArray są tablicami typu odwołania lub są tablicami typu, wykonywana jest kopia na płytki.If sourceArray and destinationArray are both reference-type arrays or are both arrays of type Object, a shallow copy is performed. Kopia Array skrócona programu jest nowym Array zawierającym odwołania do tych samych elementów jak oryginał Array.A shallow copy of an Array is a new Array containing references to the same elements as the original Array. Nie są kopiowane same elementy ani to, co odwołuje się do elementów.The elements themselves or anything referenced by the elements are not copied. Z kolei Szczegółowa kopia elementu Array Kopiuje elementy i wszystko, bezpośrednio lub pośrednio odwołujące się do elementów.In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

ArrayTypeMismatchException Jest zgłaszany, jeśli tablice mają niezgodne typy.An ArrayTypeMismatchException is thrown if the arrays are of incompatible types. Zgodność z typem jest zdefiniowana w następujący sposób:Type compatibility is defined as follows:

  • Typ jest zgodny z samym sobą.A type is compatible with itself.

  • Typ wartości jest zgodny z Object i z typem interfejsu zaimplementowanym przez ten typ wartości.A value type is compatible with Object and with an interface type implemented by that value type. Typ wartości jest uważany za podłączony do interfejsu tylko wtedy, gdy bezpośrednio implementuje ten interfejs.A value type is considered connected to an interface only if it implements that interface directly. Odłączony typy nie są zgodne.Disconnected types are not compatible.

  • 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.Two intrinsic (predefined) value types are compatible if copying from the source type to the destination type is a widening conversion. Konwersja rozszerzająca nigdy nie traci informacji, podczas gdy konwersja zawężająca może utracić informacje.A widening conversion never loses information, whereas a narrowing conversion can lose information. 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ą.For example, converting a 32-bit signed integer to a 64-bit signed integer is a widening conversion, and converting a 64-bit signed integer to a 32-bit signed integer is a narrowing conversion. Aby uzyskać więcej informacji na temat konwersji Convert, zobacz.For more information about conversions, see Convert.

  • Typ wartości niewewnętrznej (zdefiniowanej przez użytkownika) jest zgodny tylko z samym sobą.A nonintrinsic (user-defined) value type is compatible only with itself.

  • Wyliczenia mają niejawną konwersję Enum na i ich typ podstawowy.Enumerations have an implicit conversion to Enum and to their underlying type.

Jeśli każdy element w sourceArray wymaga elementu downcast (na przykład z klasy bazowej do klasy pochodnej lub z interfejsu do obiektu), a co najmniej jeden element nie może zostać rzutowany do odpowiedniego typu w destinationArray, InvalidCastException zostanie zgłoszony.If every element in sourceArray requires a downcast (for example, from a base class to a derived class or from an interface to an object) and one or more elements cannot be cast to the corresponding type in destinationArray, an InvalidCastException is thrown.

Jeśli ta metoda zgłasza wyjątek podczas kopiowania, stan destinationArray jest niezdefiniowany.If this method throws an exception while copying, the state of destinationArray is undefined.

Ta metoda jest operacją on(), gdzie n is length.This method is an O(n) operation, where n is length.

Zobacz też

Dotyczy