Array.Copy Methode

Definition

Kopiert einen Bereich von Elementen in eine Array andere Array und führt bei Bedarf Einwandlung und Boxen durch.

Überlädt

Name Beschreibung
Copy(Array, Int64, Array, Int64, Int64)

Kopiert einen Bereich von Elementen von einem Array Anfang am angegebenen Quellindex und fügt sie an einen anderen Array ab dem angegebenen Zielindex ein. Die Länge und die Indizes werden als 64-Bit-Ganzzahlen angegeben.

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

Kopiert einen Bereich von Elementen von einem Array Anfang am angegebenen Quellindex und fügt sie an einen anderen Array ab dem angegebenen Zielindex ein. Die Länge und die Indizes werden als ganze 32-Bit-Zahlen angegeben.

Copy(Array, Array, Int32)

Kopiert einen Bereich von Elementen von einem Array Anfang am ersten Element und fügt sie in einen anderen Array Beginnend am ersten Element ein. Die Länge wird als 32-Bit-Ganzzahl angegeben.

Copy(Array, Array, Int64)

Kopiert einen Bereich von Elementen von einem Array Anfang am ersten Element und fügt sie in einen anderen Array Beginnend am ersten Element ein. Die Länge wird als 64-Bit-Ganzzahl angegeben.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Sie von einem Array Typ in eine andere Object ganze Zahl vom Typ Array kopieren.

open System

let printValues (myArr: 'a []) =
    let mutable i = 0;
    let cols = myArr.GetLength(myArr.Rank - 1)
    for item in myArr do
        if i < cols then
            i <- i + 1
        else
            printfn ""
            i <- 1
        printf $"\t{item}"
    printfn ""

 // Creates and initializes a new Array of type int.
let myIntArray = [| 1..5 |]

// Creates and initializes a new Array of type Object.
let myObjArray = Array.init 5 (fun i -> i + 26 :> obj)

// Displays the initial values of both arrays.
printfn "int array:"
printValues myIntArray 
printfn "Object array:"
printValues myObjArray

// Copies the first element from the int array to the Object array.
Array.Copy(myIntArray, myIntArray.GetLowerBound 0, myObjArray, myObjArray.GetLowerBound 0, 1)

// Copies the last two elements from the Object array to the int array.
Array.Copy(myObjArray, myObjArray.GetUpperBound 0 - 1, myIntArray, myIntArray.GetUpperBound 0 - 1, 2)

// Displays the values of the modified arrays.
printfn "int array - Last two elements should now be the same as Object array:"
printValues myIntArray 
printfn "Object array - First element should now be the same as int array:"
printValues myObjArray


// This code produces the following output.
//     int array:
//         1    2    3    4    5
//     Object array:
//         26    27    28    29    30
//     int array - Last two elements should now be the same as Object array:
//         1    2    3    29    30
//     Object array - First element should now be the same as int array:
//         1    27    28    29    30
using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array of type int.
      Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );
      for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )
         myIntArray.SetValue( i+1, i );

      // Creates and initializes a new Array of type Object.
      Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );
      for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )
         myObjArray.SetValue( i+26, i );

      // Displays the initial values of both arrays.
      Console.WriteLine( "int array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array:" );
      PrintValues( myObjArray );

      // Copies the first element from the int array to the Object array.
      Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

      // Copies the last two elements from the Object array to the int array.
      Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

      // Displays the values of the modified arrays.
      Console.WriteLine( "int array - Last two elements should now be the same as Object array:" );
      PrintValues( myIntArray );
      Console.WriteLine( "Object array - First element should now be the same as int array:" );
      PrintValues( myObjArray );
   }

   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/*
This code produces the following output.

int array:
    1    2    3    4    5
Object array:
    26    27    28    29    30
int array - Last two elements should now be the same as Object array:
    1    2    3    29    30
Object array - First element should now be the same as int array:
    1    27    28    29    30
*/
Public Class SamplesArray    
    
    Public Shared Sub Main()
        
        ' Creates and initializes a new Array of type Int32.
        Dim myIntArray As Array = _
           Array.CreateInstance(GetType(System.Int32), 5)
        Dim i As Integer
        For i = myIntArray.GetLowerBound(0) To myIntArray.GetUpperBound(0)
            myIntArray.SetValue(i + 1, i)
        Next i 
        ' Creates and initializes a new Array of type Object.
        Dim myObjArray As Array = _
           Array.CreateInstance(GetType(System.Object), 5)
        For i = myObjArray.GetLowerBound(0) To myObjArray.GetUpperBound(0)
            myObjArray.SetValue(i + 26, i)
        Next i 
        ' Displays the initial values of both arrays.
        Console.WriteLine("Int32 array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array:")
        PrintValues(myObjArray)
        
        ' Copies the first element from the Int32 array to the Object array.
        Array.Copy(myIntArray, myIntArray.GetLowerBound(0), myObjArray, _
           myObjArray.GetLowerBound(0), 1)
        
        ' Copies the last two elements from the Object array to the Int32 array.
        Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
           myIntArray.GetUpperBound(0) - 1, 2)
        
        ' Displays the values of the modified arrays.
        Console.WriteLine("Int32 array - Last two elements should now be " _
           + "the same as Object array:")
        PrintValues(myIntArray)
        Console.WriteLine("Object array - First element should now be the " _
           + "same as Int32 array:")
        PrintValues(myObjArray)
    End Sub
    
    Public Shared Sub PrintValues(myArr As Array)
        Dim myEnumerator As System.Collections.IEnumerator = _
           myArr.GetEnumerator()
        Dim i As Integer = 0
        Dim cols As Integer = myArr.GetLength((myArr.Rank - 1))
        While myEnumerator.MoveNext()
            If i < cols Then
                i += 1
            Else
                Console.WriteLine()
                i = 1
            End If
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
        End While
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
' 
' Int32 array:
'     1    2    3    4    5
' Object array:
'     26    27    28    29    30
' Int32 array - Last two elements should now be the same as Object array:
'     1    2    3    29    30
' Object array - First element should now be the same as Int32 array:
'     1    27    28    29    30

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

Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.cs

Kopiert einen Bereich von Elementen von einem Array Anfang am angegebenen Quellindex und fügt sie an einen anderen Array ab dem angegebenen Zielindex 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

Die Array daten, die kopiert werden sollen.

sourceIndex
Int64

Eine 64-Bit-Ganzzahl, die den Index darstellt, in sourceArray dem das Kopieren beginnt.

destinationArray
Array

Das Array , das die Daten empfängt.

destinationIndex
Int64

Eine 64-Bit-Ganzzahl, die den Index darstellt, in destinationArray dem das Speichern beginnt.

length
Int64

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

Ausnahmen

sourceArray ist null.

-oder-

destinationArray ist null.

sourceArray und destinationArray haben unterschiedliche Rangfolgen.

sourceArray und destinationArray sind von inkompatiblen Typen.

Mindestens ein Element in sourceArray kann nicht in den Typ von destinationArray.

sourceIndex liegt außerhalb des Bereichs gültiger Indizes für die sourceArray.

-oder-

destinationIndex liegt außerhalb des Bereichs gültiger Indizes für die destinationArray.

-oder-

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

length ist größer als die Anzahl der Elemente von sourceIndex bis zum Ende von sourceArray.

-oder-

length ist größer als die Anzahl der Elemente von destinationIndex bis zum Ende von destinationArray.

Hinweise

Die Parameter sourceArray und Die destinationArray Parameter müssen dieselbe Anzahl von Dimensionen aufweisen. Darüber hinaus muss bereits dimensioniert worden sein und eine ausreichende Anzahl von Elementen aufweisen, destinationArray die von der destinationIndex Position aus beginnen, um die kopierten Daten aufzunehmen.

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 sind. 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, sourceIndex muss die obere Grenze der ersten Zeile (oder Spalte) plus der Länge der zweiten Zeile (oder Spalte) plus zwei sein.

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

[C++]

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

Die Arrays können Bezugstypenarrays oder Werttyparrays sein. Die Typ-Downcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element entboxt und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Bezugstyparray wird jedes Element boxt und dann kopiert.

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

  • Wenn sourceArray es destinationArray sich bei beiden Arrays vom Typ "Bezug" handelt oder beide Arrays Objectsind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines Elements Array ist eine neue Array , die Verweise auf dieselben Elemente wie das Original Arrayenthält. Die Elemente selbst oder alle Elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie einer Array Kopie die Elemente und alles direkt oder indirekt von den Elementen referenziert.

Ein ArrayTypeMismatchException Fehler wird ausgelöst, wenn die Arrays inkompatible Typen sind. 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 wird nur dann als mit einer Schnittstelle verbunden betrachtet, 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 Erweiterungskonvertierung ist. Eine Erweiterungskonvertierung verliert niemals Informationen, während eine schmale Konvertierung Informationen verlieren kann. Beispielsweise ist das Konvertieren einer 32-Bit-ganzzahligen Vorzeichen in eine 64-Bit-Ganzzahl eine Verbreiterungskonvertierung, und das Konvertieren einer 64-Bit-ganzzahl mit Vorzeichen in eine 32-Bit-ganzzahl mit Vorzeichen ist eine schmale Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert.

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

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

Wenn für jedes Element sourceArray eine Downcast erforderlich ist (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt), und ein oder mehrere Elemente können nicht in den entsprechenden Typ destinationArrayin umwandeln, wird ein InvalidCastException Fehler ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, wird der Status nicht destinationArray definiert.

Bei dieser Methode handelt es sich um einen O()-Vorgang, wobei n es sich um einen O(n)-Vorgang handeltlength.

Weitere Informationen

Gilt für:

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

Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.CoreCLR.cs
Quelle:
Array.cs
Quelle:
Array.cs

Kopiert einen Bereich von Elementen von einem Array Anfang am angegebenen Quellindex und fügt sie an einen anderen Array ab dem angegebenen Zielindex ein. Die Länge und die Indizes werden als ganze 32-Bit-Zahlen 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

Die Array daten, die kopiert werden sollen.

sourceIndex
Int32

Eine 32-Bit-Ganzzahl, die den Index darstellt, in sourceArray dem das Kopieren beginnt.

destinationArray
Array

Das Array , das die Daten empfängt.

destinationIndex
Int32

Eine 32-Bit-Ganzzahl, die den Index darstellt, in destinationArray dem das Speichern beginnt.

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 haben unterschiedliche Rangfolgen.

sourceArray und destinationArray sind von inkompatiblen Typen.

Mindestens ein Element in sourceArray kann nicht in den Typ von destinationArray.

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 0 (null).

length ist größer als die Anzahl der Elemente von sourceIndex bis zum Ende von sourceArray.

-oder-

length ist größer als die Anzahl der Elemente von destinationIndex bis zum Ende von destinationArray.

Hinweise

Die Parameter sourceArray und Die destinationArray Parameter müssen dieselbe Anzahl von Dimensionen aufweisen. Darüber hinaus muss bereits dimensioniert worden sein und eine ausreichende Anzahl von Elementen aufweisen, destinationArray die von der destinationIndex Position aus beginnen, um die kopierten Daten aufzunehmen.

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 sind. 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, sourceIndex muss die obere Grenze der ersten Zeile (oder Spalte) plus der Länge der zweiten Zeile (oder Spalte) plus zwei sein.

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

[C++]

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

Die Arrays können Bezugstypenarrays oder Werttyparrays sein. Die Typ-Downcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element entboxt und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Bezugstyparray wird jedes Element boxt und dann kopiert.

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

  • Wenn sourceArray es destinationArray sich bei beiden Arrays vom Typ "Bezug" handelt oder beide Arrays Objectsind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines Elements Array ist eine neue Array , die Verweise auf dieselben Elemente wie das Original Arrayenthält. Die Elemente selbst oder alle Elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie einer Array Kopie die Elemente und alles direkt oder indirekt von den Elementen referenziert.

Ein ArrayTypeMismatchException Fehler wird ausgelöst, wenn die Arrays inkompatible Typen sind. 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 wird nur dann als mit einer Schnittstelle verbunden betrachtet, 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 Erweiterungskonvertierung ist. Eine Erweiterungskonvertierung verliert niemals Informationen, während eine schmale Konvertierung Informationen verlieren kann. Beispielsweise ist das Konvertieren einer 32-Bit-ganzzahligen Vorzeichen in eine 64-Bit-Ganzzahl eine Verbreiterungskonvertierung, und das Konvertieren einer 64-Bit-ganzzahl mit Vorzeichen in eine 32-Bit-ganzzahl mit Vorzeichen ist eine schmale Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert.

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

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

Wenn für jedes Element sourceArray eine Downcast erforderlich ist (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt), und ein oder mehrere Elemente können nicht in den entsprechenden Typ destinationArrayin umwandeln, wird ein InvalidCastException Fehler ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, wird der Status nicht destinationArray definiert.

Bei dieser Methode handelt es sich um einen O()-Vorgang, wobei n es sich um einen O(n)-Vorgang handeltlength.

Weitere Informationen

Gilt für:

Copy(Array, Array, Int32)

Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.CoreCLR.cs
Quelle:
Array.cs
Quelle:
Array.cs

Kopiert einen Bereich von Elementen von einem Array Anfang am ersten Element und fügt sie in einen anderen Array Beginnend am ersten Element 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

Die Array daten, die kopiert werden sollen.

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 haben unterschiedliche Rangfolgen.

sourceArray und destinationArray sind von inkompatiblen Typen.

Mindestens ein Element in sourceArray kann nicht in den Typ von destinationArray.

length ist kleiner als 0 (null).

length ist größer als die Anzahl der Elemente in sourceArray.

-oder-

length ist größer als die Anzahl der Elemente in destinationArray.

Hinweise

Die Parameter sourceArray und Die destinationArray Parameter müssen dieselbe Anzahl von Dimensionen aufweisen. Darüber hinaus destinationArray müssen sie bereits dimensioniert sein und über eine ausreichende Anzahl von Elementen verfügen, um die kopierten Daten aufzunehmen.

Beim Kopieren zwischen mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, bei dem die Zeilen (oder Spalten) konzeptionell enden. 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.

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

[C++]

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

Die Arrays können Bezugstypenarrays oder Werttyparrays sein. Die Typ-Downcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element entboxt und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Bezugstyparray wird jedes Element boxt und dann kopiert.

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

  • Wenn sourceArray es destinationArray sich bei beiden Arrays vom Typ "Bezug" handelt oder beide Arrays Objectsind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines Elements Array ist eine neue Array , die Verweise auf dieselben Elemente wie das Original Arrayenthält. Die Elemente selbst oder alle Elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie einer Array Kopie die Elemente und alles direkt oder indirekt von den Elementen referenziert.

Ein ArrayTypeMismatchException Fehler wird ausgelöst, wenn die Arrays inkompatible Typen sind. 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 wird nur dann als mit einer Schnittstelle verbunden betrachtet, 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 Erweiterungskonvertierung ist. Eine Erweiterungskonvertierung verliert niemals Informationen, während eine schmale Konvertierung Informationen verlieren kann. Beispielsweise ist das Konvertieren einer 32-Bit-ganzzahligen Vorzeichen in eine 64-Bit-Ganzzahl eine Verbreiterungskonvertierung, und das Konvertieren einer 64-Bit-ganzzahl mit Vorzeichen in eine 32-Bit-ganzzahl mit Vorzeichen ist eine schmale Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert.

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

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

Wenn für jedes Element sourceArray eine Downcast erforderlich ist (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt), und ein oder mehrere Elemente können nicht in den entsprechenden Typ destinationArrayin umwandeln, wird ein InvalidCastException Fehler ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, wird der Status nicht destinationArray definiert.

Bei dieser Methode handelt es sich um einen O()-Vorgang, wobei n es sich um einen O(n)-Vorgang handeltlength.

Weitere Informationen

Gilt für:

Copy(Array, Array, Int64)

Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.cs
Quelle:
Array.cs

Kopiert einen Bereich von Elementen von einem Array Anfang am ersten Element und fügt sie in einen anderen Array Beginnend am ersten Element 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

Die Array daten, die kopiert werden sollen.

destinationArray
Array

Das Array , das die Daten empfängt.

length
Int64

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

Ausnahmen

sourceArray ist null.

-oder-

destinationArray ist null.

sourceArray und destinationArray haben unterschiedliche Rangfolgen.

sourceArray und destinationArray sind von inkompatiblen Typen.

Mindestens ein Element in sourceArray kann nicht in den Typ von destinationArray.

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

length ist größer als die Anzahl der Elemente in sourceArray.

-oder-

length ist größer als die Anzahl der Elemente in destinationArray.

Hinweise

Die Parameter sourceArray und Die destinationArray Parameter müssen dieselbe Anzahl von Dimensionen aufweisen. Darüber hinaus destinationArray müssen sie bereits dimensioniert sein und über eine ausreichende Anzahl von Elementen verfügen, um die kopierten Daten aufzunehmen.

Beim Kopieren zwischen mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, bei dem die Zeilen (oder Spalten) konzeptionell enden. 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.

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

[C++]

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

Die Arrays können Bezugstypenarrays oder Werttyparrays sein. Die Typ-Downcasting wird nach Bedarf ausgeführt.

  • Beim Kopieren aus einem Verweistyparray in ein Werttyparray wird jedes Element entboxt und dann kopiert. Beim Kopieren aus einem Werttyparray in ein Bezugstyparray wird jedes Element boxt und dann kopiert.

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

  • Wenn sourceArray es destinationArray sich bei beiden Arrays vom Typ "Bezug" handelt oder beide Arrays Objectsind, wird eine flache Kopie ausgeführt. Eine flache Kopie eines Elements Array ist eine neue Array , die Verweise auf dieselben Elemente wie das Original Arrayenthält. Die Elemente selbst oder alle Elemente, auf die von den Elementen verwiesen wird, werden nicht kopiert. Im Gegensatz dazu kopiert eine tiefe Kopie einer Array Kopie die Elemente und alles direkt oder indirekt von den Elementen referenziert.

Ein ArrayTypeMismatchException Fehler wird ausgelöst, wenn die Arrays inkompatible Typen sind. 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 wird nur dann als mit einer Schnittstelle verbunden betrachtet, 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 Erweiterungskonvertierung ist. Eine Erweiterungskonvertierung verliert niemals Informationen, während eine schmale Konvertierung Informationen verlieren kann. Beispielsweise ist das Konvertieren einer 32-Bit-ganzzahligen Vorzeichen in eine 64-Bit-Ganzzahl eine Verbreiterungskonvertierung, und das Konvertieren einer 64-Bit-ganzzahl mit Vorzeichen in eine 32-Bit-ganzzahl mit Vorzeichen ist eine schmale Konvertierung. Weitere Informationen zu Konvertierungen finden Sie unter Convert.

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

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

Wenn für jedes Element sourceArray eine Downcast erforderlich ist (z. B. von einer Basisklasse zu einer abgeleiteten Klasse oder von einer Schnittstelle zu einem Objekt), und ein oder mehrere Elemente können nicht in den entsprechenden Typ destinationArrayin umwandeln, wird ein InvalidCastException Fehler ausgelöst.

Wenn diese Methode beim Kopieren eine Ausnahme auslöst, wird der Status nicht destinationArray definiert.

Bei dieser Methode handelt es sich um einen O()-Vorgang, wobei n es sich um einen O(n)-Vorgang handeltlength.

Weitere Informationen

Gilt für: