Array.Copy Methode

Definition

Kopiert einen Bereich von Elementen eines Array in ein anderes Array und führt ggf. Typumwandlungen und Boxing durch.

Überlädt

Copy(Array, Array, Int32)

Kopiert einen mit dem ersten Element beginnenden Elementbereich eines Array und fügt ihn ab dem ersten Element in ein anderes Array ein. Die Länge wird als 32-Bit-Ganzzahl angegeben.

Copy(Array, Array, Int64)

Kopiert einen mit dem ersten Element beginnenden Elementbereich eines Array und fügt ihn ab dem ersten Element in ein anderes Array ein. Die Länge wird als 64-Bit-Ganzzahl angegeben.

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

Kopiert einen beim angegebenen Quellindex beginnenden Elementbereich aus einem Array und fügt ihn ab dem angegebenen Zielindex in ein anderes Array ein. Die Länge und die Indizes werden als 32-Bit-Ganzzahlen angegeben.

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

Kopiert einen beim angegebenen Quellindex beginnenden Elementbereich aus einem Array und fügt ihn ab dem angegebenen Zielindex in ein anderes Array ein. Die Länge und die Indizes werden als 64-Bit-Ganzzahlen angegeben.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Sie von einem Array vom Typ in einen anderen vom Typ integer Object Array kopieren.

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 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, Array, Int32)

Kopiert einen mit dem ersten Element beginnenden Elementbereich eines Array und fügt ihn ab dem ersten Element in ein anderes Array ein. Die Länge wird als 32-Bit-Ganzzahl angegeben.

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)

Parameter

sourceArray
Array

Das Array, das die zu kopierenden Daten enthält.

destinationArray
Array

Das Array, das die Daten empfängt.

length
Int32

Eine 32-Bit-Ganzzahl, die die Anzahl der zu kopierenden Elemente darstellt.

Ausnahmen

sourceArray ist null.

- oder -

destinationArray ist null.

sourceArray und destinationArray sind von unterschiedlichem Rang.

sourceArray und destinationArray weisen inkompatible Typen auf.

Mindestens ein Element in sourceArray kann nicht in den destinationArray-Typ umgewandelt werden.

length ist kleiner als Null.

length ist größer als die Anzahl von Elementen in sourceArray.

  • oder -

length ist größer als die Anzahl von Elementen in destinationArray.

Hinweise

Die sourceArray Parameter und müssen die gleiche Anzahl von Dimensionen destinationArray aufweisen. Darüber hinaus destinationArray muss bereits dimensioniert worden sein und über eine ausreichende Anzahl von Elementen verfügen, um die kopierten Daten aufnehmen zu können.

Beim Kopieren zwischen mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, in dem die Zeilen (oder Spalten) konzeptionell end-to-end angeordnet werden. Wenn ein Array beispielsweise drei Zeilen (oder Spalten) mit jeweils vier Elementen aufweist, werden beim Kopieren von sechs Elementen vom Anfang des Arrays alle vier Elemente der ersten Zeile (oder Spalte) und die ersten beiden Elemente der zweiten Zeile (oder Spalte) kopiert.

Wenn sourceArray und destinationArray überlappen, verhält sich diese Methode so, als ob die ursprünglichen Werte von sourceArray an einem temporären Speicherort beibehalten wurden, bevor destinationArray überschrieben wird.

[C++]

Diese Methode entspricht der C/C++-Standardfunktion memmove , nicht memcpy .

Die Arrays können Verweistyparrays oder Werttyparrays sein. Typdecasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element unboxed und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Verweistyparray wird jedes Element geschachtelt und dann kopiert.

  • Beim Kopieren von einem Verweistyp- oder Werttyparray in ein Object Array Object wird ein erstellt, um jeden Wert oder Verweis zu speichern und dann zu kopieren. Wenn sie aus einem Object Array in ein Verweistyp- oder Werttyparray kopieren und die Zuweisung nicht möglich ist, InvalidCastException wird eine ausgelöst.

  • Wenn sourceArray und destinationArray sowohl Verweistyparrays als auch Arrays vom Typ Object sind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines Array ist eine neue , die Verweise auf die gleichen Elemente wie die ursprüngliche Array Array enthält. Die Elemente selbst oder elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie eines Array die Elemente und alles direkt oder indirekt, auf das von den Elementen verwiesen wird.

Eine ArrayTypeMismatchException wird ausgelöst, wenn die Arrays inkompatible Typen aufweisen. Die Typkompatibilität ist wie folgt definiert:

  • Ein Typ ist mit sich selbst kompatibel.

  • Ein Werttyp ist kompatibel mit Object und mit einem Schnittstellentyp, der von diesem Werttyp implementiert wird. Ein Werttyp gilt nur dann als mit einer Schnittstelle verbunden, wenn er diese Schnittstelle direkt implementiert. Getrennte Typen sind nicht kompatibel.

  • Zwei systeminterne (vordefinierte) Werttypen sind kompatibel, wenn das Kopieren vom Quelltyp in den Zieltyp eine erweiternde Konvertierung ist. Bei einer erweiternden Konvertierung gehen niemals Informationen verloren, während bei einer einschränkenden Konvertierung Informationen verloren gehen können. Beispielsweise ist das Konvertieren einer 32-Bit-Ganzzahl mit Vorzeichen in eine 64-Bit-Ganzzahl mit Vorzeichen eine erweiternde Konvertierung, und das Konvertieren einer 64-Bit-Ganzzahl mit Vorzeichen in eine 32-Bit-Ganzzahl mit Vorzeichen ist eine einschränkende Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert .

  • Ein nichtintrinsischer (benutzerdefinierter) Werttyp ist nur mit sich selbst kompatibel.

  • Enumerationen haben eine implizite Konvertierung in Enum und in ihren zugrunde liegenden Typ.

Wenn jedes Element in sourceArray einen Downcast erfordert (z. B. von einer Basisklasse in eine abgeleitete Klasse oder von einer Schnittstelle zu einem Objekt), und ein oder mehrere Elemente nicht in den entsprechenden Typ in typisiert werden destinationArray können, InvalidCastException wird eine ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, ist der Zustand von destinationArray nicht definiert.

Diese Methode ist ein n O()-Vorgang, wobei n length ist.

Siehe auch

Gilt für

Copy(Array, Array, Int64)

Kopiert einen mit dem ersten Element beginnenden Elementbereich eines Array und fügt ihn ab dem ersten Element in ein anderes Array ein. Die Länge wird als 64-Bit-Ganzzahl angegeben.

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)

Parameter

sourceArray
Array

Das Array, das die zu kopierenden Daten enthält.

destinationArray
Array

Das Array, das die Daten empfängt.

length
Int64

Eine 64-Bit-Ganzzahl, die die Anzahl der zu kopierenden Elemente darstellt. Die Ganzzahl muss zwischen 0 (null) und einschließlich MaxValue liegen.

Ausnahmen

sourceArray ist null.

- oder -

destinationArray ist null.

sourceArray und destinationArray sind von unterschiedlichem Rang.

sourceArray und destinationArray weisen inkompatible Typen auf.

Mindestens ein Element in sourceArray kann nicht in den destinationArray-Typ umgewandelt werden.

length ist kleiner als 0 oder größer als MaxValue.

length ist größer als die Anzahl von Elementen in sourceArray.

  • oder -

length ist größer als die Anzahl von Elementen in destinationArray.

Hinweise

Die sourceArray Parameter und müssen die gleiche Anzahl von Dimensionen destinationArray aufweisen. Darüber hinaus destinationArray muss bereits dimensioniert worden sein und über eine ausreichende Anzahl von Elementen verfügen, um die kopierten Daten aufnehmen zu können.

Beim Kopieren zwischen mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, in dem die Zeilen (oder Spalten) konzeptionell end-to-end angeordnet werden. Wenn ein Array beispielsweise drei Zeilen (oder Spalten) mit jeweils vier Elementen aufweist, werden beim Kopieren von sechs Elementen vom Anfang des Arrays alle vier Elemente der ersten Zeile (oder Spalte) und die ersten beiden Elemente der zweiten Zeile (oder Spalte) kopiert.

Wenn sourceArray und destinationArray überlappen, verhält sich diese Methode so, als ob die ursprünglichen Werte von sourceArray an einem temporären Speicherort beibehalten wurden, bevor destinationArray überschrieben wird.

[C++]

Diese Methode entspricht der C/C++-Standardfunktion, memmove nicht memcpy .

Die Arrays können Verweistyparrays oder Werttyparrays sein. Typabcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element unboxed und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Verweistyparray wird jedes Element geschachtelt und dann kopiert.

  • Beim Kopieren aus einem Verweistyp- oder Werttyparray in ein Array wird ein erstellt, das jeden Wert oder Verweis enthält, und Object Object dann kopiert. Beim Kopieren aus einem Array in ein Verweistyp- oder Werttyparray, und die Zuweisung ist Object InvalidCastException nicht möglich, wird eine ausgelöst.

  • Wenn sourceArray und destinationArray sowohl Verweistyparrays als auch Arrays vom Typ Object sind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines ist eine neue , die Verweise auf die Array gleichen Elemente wie das ursprüngliche Array Array enthält. Die Elemente selbst oder elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie eines die Elemente und alles, auf die die Elemente direkt oder indirekt Array verweisen.

Eine ArrayTypeMismatchException wird ausgelöst, wenn die Arrays inkompatible Typen haben. Typkompatibilität ist wie folgt definiert:

  • Ein Typ ist mit sich selbst kompatibel.

  • Ein Werttyp ist mit und mit einem Object Schnittstellentyp kompatibel, der von diesem Werttyp implementiert wird. Ein Werttyp gilt nur dann als mit einer Schnittstelle verbunden, wenn er diese Schnittstelle direkt implementiert. Getrennte Typen sind nicht kompatibel.

  • Zwei systeminterne (vordefinierte) Werttypen sind kompatibel, wenn das Kopieren vom Quelltyp in den Zieltyp eine sich ausweitende Konvertierung ist. Eine sich ausweitende Konvertierung verliert niemals Informationen, während eine eindegende Konvertierung Informationen verlieren kann. Beispielsweise ist die Konvertierung einer 32-Bit-Ganzzahl mit Vorzeichen in eine 64-Bit-Ganzzahl mit Vorzeichen eine sich ausweitende Konvertierung, und die Konvertierung einer 64-Bit-Ganzzahl mit Vorzeichen in eine 32-Bit-Ganzzahl mit Vorzeichen ist eine eindechende Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert .

  • Ein nicht intrinsischer (benutzerdefinierter) Werttyp ist nur mit sich selbst kompatibel.

  • Enumerationen verfügen über eine implizite Konvertierung in Enum und in ihren zugrunde liegenden Typ.

Wenn jedes Element in einen Downcast erfordert (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt) und ein oder mehrere Elemente nicht in den entsprechenden Typ in umgeleitet werden können, wird eine sourceArray destinationArray InvalidCastException ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, ist der Zustand destinationArray von nicht definiert.

Diese Methode ist ein O( n ) -Vorgang, wobei n length ist.

Siehe auch

Gilt für

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

Kopiert einen beim angegebenen Quellindex beginnenden Elementbereich aus einem Array und fügt ihn ab dem angegebenen Zielindex in ein anderes Array ein. Die Länge und die Indizes werden als 32-Bit-Ganzzahlen angegeben.

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)

Parameter

sourceArray
Array

Das Array, das die zu kopierenden Daten enthält.

sourceIndex
Int32

Eine 32-Bit-Ganzzahl, die den Index im sourceArray angibt, ab dem kopiert werden soll.

destinationArray
Array

Das Array, das die Daten empfängt.

destinationIndex
Int32

Eine 32-Bit-Ganzzahl, die den Index im destinationArray angibt, ab dem gespeichert werden soll.

length
Int32

Eine 32-Bit-Ganzzahl, die die Anzahl der zu kopierenden Elemente darstellt.

Ausnahmen

sourceArray ist null.

- oder -

destinationArray ist null.

sourceArray und destinationArray sind von unterschiedlichem Rang.

sourceArray und destinationArray weisen inkompatible Typen auf.

Mindestens ein Element in sourceArray kann nicht in den destinationArray-Typ umgewandelt werden.

sourceIndex ist kleiner als die untere Grenze der ersten Dimension von sourceArray.

- oder -

destinationIndex ist kleiner als die untere Grenze der ersten Dimension von destinationArray.

- oder -

length ist kleiner als Null.

length ist größer als die Anzahl der Elemente vom sourceIndex bis zum Ende des sourceArrays.

  • oder -

length ist größer als die Anzahl der Elemente vom destinationIndex bis zum Ende des destinationArrays.

Hinweise

Die sourceArray Parameter und müssen die gleiche Anzahl von Dimensionen destinationArray haben. Darüber hinaus muss bereits dimensioniert worden sein und über eine ausreichende Anzahl von Elementen verfügen, beginnend bei der Position, um die destinationArray destinationIndex kopierten Daten aufnehmen zu können.

Beim Kopieren zwischen mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, bei dem die Zeilen (oder Spalten) konzeptionell end-to-end angeordnet werden. Wenn ein Array z. B. drei Zeilen (oder Spalten) mit jeweils vier Elementen enthält, würde das Kopieren von sechs Elementen vom Anfang des Arrays alle vier Elemente der ersten Zeile (oder Spalte) und die ersten beiden Elemente der zweiten Zeile (oder Spalte) kopieren. Um mit dem Kopieren aus dem zweiten Element der dritten Zeile (oder Spalte) zu beginnen, muss die Obergrenze der ersten Zeile (oder Spalte) plus die Länge der zweiten Zeile sourceIndex (oder Spalte) plus zwei sein.

Wenn sich und überschneiden, verhält sich diese Methode so, als ob die ursprünglichen Werte von an einem temporären Speicherort beibehalten sourceArray destinationArray sourceArray wurden, bevor destinationArray überschrieben wird.

[C++]

Diese Methode entspricht der C/C++-Standardfunktion, memmove nicht memcpy .

Die Arrays können Verweistyparrays oder Werttyparrays sein. Typabcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element unboxed und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Verweistyparray wird jedes Element geschachtelt und dann kopiert.

  • Beim Kopieren aus einem Verweistyp- oder Werttyparray in ein Array wird ein erstellt, das jeden Wert oder Verweis enthält, und Object Object dann kopiert. Beim Kopieren aus einem Array in ein Verweistyp- oder Werttyparray, und die Zuweisung ist Object InvalidCastException nicht möglich, wird eine ausgelöst.

  • Wenn sourceArray und destinationArray sowohl Verweistyparrays als auch Arrays vom Typ Object sind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines ist eine neue , die Verweise auf die Array gleichen Elemente wie das ursprüngliche Array Array enthält. Die Elemente selbst oder elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie eines die Elemente und alles, auf die die Elemente direkt oder indirekt Array verweisen.

Eine ArrayTypeMismatchException wird ausgelöst, wenn die Arrays inkompatible Typen haben. Typkompatibilität ist wie folgt definiert:

  • Ein Typ ist mit sich selbst kompatibel.

  • Ein Werttyp ist mit und mit einem Object Schnittstellentyp kompatibel, der von diesem Werttyp implementiert wird. Ein Werttyp gilt nur dann als mit einer Schnittstelle verbunden, wenn er diese Schnittstelle direkt implementiert. Getrennte Typen sind nicht kompatibel.

  • Zwei systeminterne (vordefinierte) Werttypen sind kompatibel, wenn das Kopieren vom Quelltyp in den Zieltyp eine sich ausweitende Konvertierung ist. Eine sich ausweitende Konvertierung verliert niemals Informationen, während eine eindegende Konvertierung Informationen verlieren kann. Beispielsweise ist die Konvertierung einer 32-Bit-Ganzzahl mit Vorzeichen in eine 64-Bit-Ganzzahl mit Vorzeichen eine sich ausweitende Konvertierung, und die Konvertierung einer 64-Bit-Ganzzahl mit Vorzeichen in eine 32-Bit-Ganzzahl mit Vorzeichen ist eine eindechende Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert .

  • Ein nicht intrinsischer (benutzerdefinierter) Werttyp ist nur mit sich selbst kompatibel.

  • Enumerationen verfügen über eine implizite Konvertierung in Enum und in ihren zugrunde liegenden Typ.

Wenn jedes Element in einen Downcast erfordert (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt) und ein oder mehrere Elemente nicht in den entsprechenden Typ in umgeleitet werden können, wird eine sourceArray destinationArray InvalidCastException ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, ist der Zustand destinationArray von nicht definiert.

Diese Methode ist ein O( n ) -Vorgang, wobei n length ist.

Siehe auch

Gilt für

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

Kopiert einen beim angegebenen Quellindex beginnenden Elementbereich aus einem Array und fügt ihn ab dem angegebenen Zielindex in ein anderes Array ein. Die Länge und die Indizes werden als 64-Bit-Ganzzahlen angegeben.

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)

Parameter

sourceArray
Array

Das Array, das die zu kopierenden Daten enthält.

sourceIndex
Int64

Eine 64-Bit-Ganzzahl, die den Index im sourceArray angibt, ab dem kopiert werden soll.

destinationArray
Array

Das Array, das die Daten empfängt.

destinationIndex
Int64

Eine 64-Bit-Ganzzahl, die den Index im destinationArray angibt, ab dem gespeichert werden soll.

length
Int64

Eine 64-Bit-Ganzzahl, die die Anzahl der zu kopierenden Elemente darstellt. Die Ganzzahl muss zwischen 0 (null) und einschließlich MaxValue liegen.

Ausnahmen

sourceArray ist null.

- oder -

destinationArray ist null.

sourceArray und destinationArray sind von unterschiedlichem Rang.

sourceArray und destinationArray weisen inkompatible Typen auf.

Mindestens ein Element in sourceArray kann nicht in den destinationArray-Typ umgewandelt werden.

sourceIndex liegt außerhalb des Bereichs der gültigen Indizes für das sourceArray.

- oder -

destinationIndex liegt außerhalb des Bereichs der gültigen Indizes für das destinationArray.

- oder -

length ist kleiner als 0 oder größer als MaxValue.

length ist größer als die Anzahl der Elemente vom sourceIndex bis zum Ende des sourceArrays.

  • oder -

length ist größer als die Anzahl der Elemente vom destinationIndex bis zum Ende des destinationArrays.

Hinweise

Die sourceArray Parameter und müssen die gleiche Anzahl von Dimensionen destinationArray haben. Darüber hinaus muss bereits dimensioniert worden sein und über eine ausreichende Anzahl von Elementen verfügen, beginnend bei der Position, um die destinationArray destinationIndex kopierten Daten aufnehmen zu können.

Beim Kopieren zwischen mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, bei dem die Zeilen (oder Spalten) konzeptionell end-to-end angeordnet werden. Wenn ein Array z. B. drei Zeilen (oder Spalten) mit jeweils vier Elementen enthält, würde das Kopieren von sechs Elementen vom Anfang des Arrays alle vier Elemente der ersten Zeile (oder Spalte) und die ersten beiden Elemente der zweiten Zeile (oder Spalte) kopieren. Um mit dem Kopieren aus dem zweiten Element der dritten Zeile (oder Spalte) zu beginnen, muss die Obergrenze der ersten Zeile (oder Spalte) plus die Länge der zweiten Zeile sourceIndex (oder Spalte) plus zwei sein.

Wenn sich und überschneiden, verhält sich diese Methode so, als ob die ursprünglichen Werte von an einem temporären Speicherort beibehalten sourceArray destinationArray sourceArray wurden, bevor destinationArray überschrieben wird.

[C++]

Diese Methode entspricht der C/C++-Standardfunktion, memmove nicht memcpy .

Die Arrays können Verweistyparrays oder Werttyparrays sein. Typabcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element unboxed und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Verweistyparray wird jedes Element geschachtelt und dann kopiert.

  • Beim Kopieren aus einem Verweistyp- oder Werttyparray in ein Array wird ein erstellt, das jeden Wert oder Verweis enthält, und Object Object dann kopiert. Beim Kopieren aus einem Array in ein Verweistyp- oder Werttyparray, und die Zuweisung ist Object InvalidCastException nicht möglich, wird eine ausgelöst.

  • Wenn sourceArray und destinationArray sowohl Verweistyparrays als auch Arrays vom Typ Object sind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines ist eine neue , die Verweise auf die Array gleichen Elemente wie das ursprüngliche Array Array enthält. Die Elemente selbst oder elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie eines die Elemente und alles, auf die die Elemente direkt oder indirekt Array verweisen.

Eine ArrayTypeMismatchException wird ausgelöst, wenn die Arrays inkompatible Typen haben. Typkompatibilität ist wie folgt definiert:

  • Ein Typ ist mit sich selbst kompatibel.

  • Ein Werttyp ist mit und mit einem Object Schnittstellentyp kompatibel, der von diesem Werttyp implementiert wird. Ein Werttyp gilt nur dann als mit einer Schnittstelle verbunden, wenn er diese Schnittstelle direkt implementiert. Getrennte Typen sind nicht kompatibel.

  • Zwei systeminterne (vordefinierte) Werttypen sind kompatibel, wenn das Kopieren vom Quelltyp in den Zieltyp eine sich ausweitende Konvertierung ist. Eine sich ausweitende Konvertierung verliert niemals Informationen, während eine eindegende Konvertierung Informationen verlieren kann. Beispielsweise ist die Konvertierung einer 32-Bit-Ganzzahl mit Vorzeichen in eine 64-Bit-Ganzzahl mit Vorzeichen eine sich ausweitende Konvertierung, und die Konvertierung einer 64-Bit-Ganzzahl mit Vorzeichen in eine 32-Bit-Ganzzahl mit Vorzeichen ist eine eindechende Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert .

  • Ein nicht intrinsischer (benutzerdefinierter) Werttyp ist nur mit sich selbst kompatibel.

  • Enumerationen verfügen über eine implizite Konvertierung in Enum und in ihren zugrunde liegenden Typ.

Wenn jedes Element in einen Downcast erfordert (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt) und ein oder mehrere Elemente nicht in den entsprechenden Typ in umgeleitet werden können, wird eine sourceArray destinationArray InvalidCastException ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, ist der Zustand destinationArray von nicht definiert.

Diese Methode ist ein O( n ) -Vorgang, wobei n length ist.

Siehe auch

Gilt für