(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Array.Copy-Methode (Array, Int32, Array, Int32, Int32)

Kopiert einen beim angegebenen Quellindex beginnenden Elementbereich eines 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.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

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

Parameter

sourceArray
Typ: System.Array
Das Array, das die zu kopierenden Daten enthält.
sourceIndex
Typ: System.Int32
Eine 32-Bit-Ganzzahl, die den Index im sourceArray angibt, ab dem kopiert werden soll.
destinationArray
Typ: System.Array
Das Array, das die Daten empfängt.
destinationIndex
Typ: System.Int32
Eine 32-Bit-Ganzzahl, die den Index im destinationArray angibt, ab dem gespeichert werden soll.
length
Typ: System.Int32
Eine 32-Bit-Ganzzahl, die die Anzahl der zu kopierenden Elemente darstellt.

AusnahmeBedingung
ArgumentNullException

sourceArray ist null.

- oder -

destinationArray ist null.

RankException

sourceArray und destinationArray haben verschiedene Ränge.

ArrayTypeMismatchException

Die Typen von sourceArray und destinationArray sind inkompatibel.

InvalidCastException

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

ArgumentOutOfRangeException

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).

ArgumentException

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.

Der sourceArray-Parameter und der destinationArray-Parameter müssen die gleiche Anzahl von Dimensionen aufweisen. Darüber hinaus muss bereits destinationArray dimensioniert worden sein und muss über eine ausreichende Anzahl von Elementen aufweisen, die von der destinationIndex-Position, die kopierten Daten angepasst ausgehen.

Beim Kopieren von mehrdimensionalen Arrays verhält sich das Array wie ein langes eindimensionales Array, dessen Zeilen (oder Spalten) hintereinander angeordnet sind. Wenn ein Array z. B. aus drei Zeilen (oder Spalten) mit je 4 Elementen besteht, werden beim Kopieren von sechs Elementen vom Anfang des Arrays alle vier Elemente der ersten Zeile (Spalte) und die ersten zwei Elemente der zweiten Zeile (Spalte) kopiert. Wenn beim zweiten Element der dritten Zeile (oder Spalte) mit dem Kopieren begonnen werden soll, muss sourceIndex gleich der oberen Grenze der ersten Zeile (Spalte) plus Länge der zweiten Zeile (Spalte) plus 2 sein.

Wenn sich sourceArray und destinationArray überlappen, verhält sich diese Methode so, als ob die ursprünglichen Werte von sourceArray vor dem Überschreiben von destinationArray an einem temporären Speicherort beibehalten werden.

[C++]

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

Die Arrays können Referenztyparrays oder Werttyparrays sein. Bei Bedarf wird eine Umwandlung des Typs durchgeführt.

  • Beim Kopieren eines Referenztyparrays in ein Werttyparray wird jedes Element mittels Unboxing entpackt und dann kopiert. Beim Kopieren eines Werttyparrays in ein Referenztyparray wird jedes Element mittels Boxing gepackt und dann kopiert.

  • Beim Kopieren eines Referenztyp- oder Werttyparrays in ein Object-Array wird für jeden Wert oder Verweis ein Object erstellt und dann kopiert. Beim Kopieren eines Object-Arrays in ein Referenztyp- oder Werttyparray wird eine InvalidCastException ausgelöst, wenn die Zuweisung nicht möglich ist.

  • Wenn sourceArray und destinationArray beide Referenztyparrays oder Arrays vom Typ Object sind, wird eine flache Kopie erstellt. Einer flache Kopie eines Array ist ein neues Array, das Verweise auf dieselben Elemente wie das ursprüngliche Array enthält. Die eigentlichen Elemente sowie Elemente, auf die ggf. verwiesen wird, werden nicht kopiert. Im Gegensatz dazu werden bei einer tiefen Kopie eines Array die Elemente sowie alle untergeordneten Elemente kopiert, auf die direkt oder indirekt verwiesen wird.

Wenn die Typen der Arrays inkompatibel sind, wird eine ArrayTypeMismatchException ausgelöst. Typkompatibilität ist wie folgt definiert:

  • Jeder Typ ist mit sich selbst kompatibel.

  • Ein Werttyp ist mit Object und mit von diesem Werttyp implementierten Schnittstellentypen kompatibel. Ein Werttyp wird nur dann als mit einer Schnittstelle verbunden betrachtet, wenn er die Schnittstelle direkt implementiert. Nicht verbundene Typen sind nicht kompatibel.

  • Zwei systeminterne (vordefinierte) Werttypen sind kompatibel, wenn das Kopieren des Quelltyps in den Zieltyp eine erweiternde Konvertierung ist. Bei einer erweiternden Konvertierung gehen niemals Informationen verloren, während dies bei einer einschränkenden Konvertierung der Fall sein kann. Die Konvertierung einer 32-Bit-Ganzzahl mit Vorzeichen in eine 64-Bit-Ganzzahl mit Vorzeichen ist z. B. eine erweiternde Konvertierung, während die Konvertierung einer 64-Bit-Ganzzahl mit Vorzeichen in eine 32-Bit-Ganzzahl mit Vorzeichen eine einschränkende Konvertierung ist. Weitere Informationen über Konvertierungen finden Sie unter Convert.

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

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

Wenn jedes Element von sourceArray eine Umwandlung erfordert (z. B. von einer Basisklasse in eine abgeleitete Klasse oder von einer Schnittstelle in ein Objekt) und mindestens ein Element nicht in den entsprechenden Typ in destinationArray umgewandelt werden kann, wird eine InvalidCastException ausgelöst.

Wenn diese Methode während des Kopierens eine Ausnahme auslöst, ist der Zustand von destinationArray undefiniert.

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

Im folgenden Codebeispiel wird veranschaulicht, wie aus einem Array vom Typ Object in ein anderes Array von ganzzahligem Typ kopiert wird.


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


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft