Array.Copy Metode

Definisi

Menyalin berbagai elemen satu Array ke elemen lainnya Array dan melakukan pengecoran jenis dan tinju sesuai kebutuhan.

Overload

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

Menyalin rentang elemen dari awal Array pada indeks sumber yang ditentukan dan menempelkannya ke elemen lain Array yang dimulai pada indeks tujuan yang ditentukan. Panjang dan indeks ditentukan sebagai bilangan bulat 64-bit.

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

Menyalin rentang elemen dari awal Array pada indeks sumber yang ditentukan dan menempelkannya ke elemen lain Array yang dimulai pada indeks tujuan yang ditentukan. Panjang dan indeks ditentukan sebagai bilangan bulat 32-bit.

Copy(Array, Array, Int32)

Menyalin berbagai elemen dari awal Array pada elemen pertama dan menempelkannya ke elemen lain Array yang dimulai pada elemen pertama. Panjang ditentukan sebagai bilangan bulat 32-bit.

Copy(Array, Array, Int64)

Menyalin berbagai elemen dari awal Array pada elemen pertama dan menempelkannya ke elemen lain Array yang dimulai pada elemen pertama. Panjang ditentukan sebagai bilangan bulat 64-bit.

Contoh

Contoh kode berikut menunjukkan cara menyalin dari salah satu Array jenis Object ke bilangan bulat jenis lainnya Array .

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

Sumber:
Array.cs
Sumber:
Array.cs
Sumber:
Array.cs

Menyalin rentang elemen dari awal Array pada indeks sumber yang ditentukan dan menempelkannya ke elemen lain Array yang dimulai pada indeks tujuan yang ditentukan. Panjang dan indeks ditentukan sebagai bilangan bulat 64-bit.

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

Array yang berisi data yang akan disalin.

sourceIndex
Int64

Bilangan bulat 64-bit yang mewakili indeks di mana penyalinan sourceArray dimulai.

destinationArray
Array

Array yang menerima data.

destinationIndex
Int64

Bilangan bulat 64-bit yang mewakili indeks tempat destinationArray penyimpanan dimulai.

length
Int64

Bilangan bulat 64-bit yang menunjukkan jumlah elemen yang akan disalin. Bilangan bulat harus antara nol dan Int32.MaxValue, inklusif.

Pengecualian

sourceArrayadalah null.

-atau-

destinationArrayadalah null.

sourceArray dan destinationArray memiliki peringkat yang berbeda.

sourceArray dan destinationArray merupakan jenis yang tidak kompatibel.

Setidaknya satu elemen di tidak dapat ditransmisikan sourceArray ke jenis destinationArray.

sourceIndex berada di luar rentang indeks yang valid untuk sourceArray.

-atau-

destinationIndex berada di luar rentang indeks yang valid untuk destinationArray.

-atau-

length kurang dari 0 atau lebih besar dari Int32.MaxValue.

length lebih besar dari jumlah elemen dari sourceIndex hingga akhir sourceArray.

-atau-

length lebih besar dari jumlah elemen dari destinationIndex hingga akhir destinationArray.

Keterangan

Parameter sourceArray dan destinationArray harus memiliki jumlah dimensi yang sama. Selain itu, destinationArray harus sudah memiliki dimensi dan harus memiliki jumlah elemen yang memadai mulai dari destinationIndex posisi untuk mengakomodasi data yang disalin.

Saat menyalin antara array multidimensi, array bertingkah seperti array satu dimensi yang panjang, di mana baris (atau kolom) secara konseptual diletakkan secara end-to-end. Misalnya, jika array memiliki tiga baris (atau kolom) dengan masing-masing empat elemen, menyalin enam elemen dari awal array akan menyalin keempat elemen baris pertama (atau kolom) dan dua elemen pertama dari baris kedua (atau kolom). Untuk mulai menyalin dari elemen kedua baris ketiga (atau kolom), sourceIndex harus berupa batas atas baris pertama (atau kolom) ditambah panjang baris kedua (atau kolom) ditambah dua.

Jika sourceArray dan destinationArray tumpang tindih, metode ini bersifat seolah-olah nilai sourceArray asli dipertahankan di lokasi sementara sebelum destinationArray ditimpa.

[C++]

Metode ini setara dengan fungsi memmoveC/C++ standar, bukan memcpy.

Array dapat berupa array jenis referensi atau array jenis nilai. Jenis downcasting dilakukan, sesuai kebutuhan.

  • Saat menyalin dari array jenis referensi ke array jenis nilai, setiap elemen tidak dikotak lalu disalin. Saat menyalin dari array jenis nilai ke array jenis referensi, setiap elemen dikotak lalu disalin.

  • Saat menyalin dari array jenis referensi atau jenis nilai ke Object array, Object dibuat untuk menahan setiap nilai atau referensi lalu disalin. Saat menyalin dari Object array ke array jenis referensi atau jenis nilai dan penugasan tidak dimungkinkan, dilemparkan InvalidCastException .

  • Jika sourceArray dan destinationArray keduanya adalah array jenis referensi atau keduanya adalah array jenis Object, salinan dangkal dilakukan. Salinan dangkal dari Array adalah referensi baru Array yang berisi ke elemen yang sama dengan aslinya Array. Elemen itu sendiri atau apa pun yang direferensikan oleh elemen tidak disalin. Sebaliknya, salinan mendalam dari Array salinan elemen dan semuanya secara langsung atau tidak langsung dirujuk oleh elemen.

ArrayTypeMismatchException dilemparkan jika array memiliki jenis yang tidak kompatibel. Kompatibilitas jenis didefinisikan sebagai berikut:

  • Jenis kompatibel dengan dirinya sendiri.

  • Jenis nilai kompatibel dengan Object dan dengan jenis antarmuka yang diimplementasikan oleh jenis nilai tersebut. Jenis nilai dianggap terhubung ke antarmuka hanya jika mengimplementasikan antarmuka tersebut secara langsung. Tipe terputus tidak kompatibel.

  • Dua jenis nilai intrinsik (sudah ditentukan sebelumnya) kompatibel jika menyalin dari jenis sumber ke jenis tujuan adalah konversi yang melebar. Konversi yang melebar tidak pernah kehilangan informasi, sedangkan konversi yang mempersempit dapat kehilangan informasi. Misalnya, mengonversi bilangan bulat bertanda 32-bit menjadi bilangan bulat bertanda tangan 64-bit adalah konversi yang melebar, dan mengonversi bilangan bulat bertanda tangan 64-bit menjadi bilangan bulat bertanda tangan 32-bit adalah konversi yang mempersempit. Untuk informasi selengkapnya tentang konversi, lihat Convert.

  • Jenis nilai nonintrinsic (ditentukan pengguna) hanya kompatibel dengan dirinya sendiri.

  • Enumerasi memiliki konversi implisit ke Enum dan ke jenis yang mendasarnya.

Jika setiap elemen dalam sourceArray memerlukan downcast (misalnya, dari kelas dasar ke kelas turunan atau dari antarmuka ke objek) dan satu atau beberapa elemen tidak dapat ditransmisikan ke jenis yang sesuai di destinationArray, dilemparkan InvalidCastException .

Jika metode ini memberikan pengecualian saat menyalin, status destinationArray tidak terdefinisi.

Metode ini adalah operasi O(n), di mana n adalah length.

Lihat juga

Berlaku untuk

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

Sumber:
Array.CoreCLR.cs
Sumber:
Array.cs
Sumber:
Array.cs

Menyalin rentang elemen dari awal Array pada indeks sumber yang ditentukan dan menempelkannya ke elemen lain Array yang dimulai pada indeks tujuan yang ditentukan. Panjang dan indeks ditentukan sebagai bilangan bulat 32-bit.

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

Array yang berisi data yang akan disalin.

sourceIndex
Int32

Bilangan bulat 32-bit yang mewakili indeks di mana penyalinan sourceArray dimulai.

destinationArray
Array

Array yang menerima data.

destinationIndex
Int32

Bilangan bulat 32-bit yang mewakili indeks tempat destinationArray penyimpanan dimulai.

length
Int32

Bilangan bulat 32-bit yang menunjukkan jumlah elemen yang akan disalin.

Pengecualian

sourceArrayadalah null.

-atau-

destinationArrayadalah null.

sourceArray dan destinationArray memiliki peringkat yang berbeda.

sourceArray dan destinationArray merupakan jenis yang tidak kompatibel.

Setidaknya satu elemen di tidak dapat ditransmisikan sourceArray ke jenis destinationArray.

sourceIndex kurang dari batas bawah dimensi sourceArraypertama .

-atau-

destinationIndex kurang dari batas bawah dimensi destinationArraypertama .

-atau-

length kurang dari nol.

length lebih besar dari jumlah elemen dari sourceIndex hingga akhir sourceArray.

-atau-

length lebih besar dari jumlah elemen dari destinationIndex hingga akhir destinationArray.

Keterangan

Parameter sourceArray dan destinationArray harus memiliki jumlah dimensi yang sama. Selain itu, destinationArray harus sudah memiliki dimensi dan harus memiliki jumlah elemen yang memadai mulai dari destinationIndex posisi untuk mengakomodasi data yang disalin.

Saat menyalin antara array multidimensi, array bertingkah seperti array satu dimensi yang panjang, di mana baris (atau kolom) secara konseptual diletakkan secara end-to-end. Misalnya, jika array memiliki tiga baris (atau kolom) dengan masing-masing empat elemen, menyalin enam elemen dari awal array akan menyalin keempat elemen baris pertama (atau kolom) dan dua elemen pertama dari baris kedua (atau kolom). Untuk mulai menyalin dari elemen kedua baris ketiga (atau kolom), sourceIndex harus berupa batas atas baris pertama (atau kolom) ditambah panjang baris kedua (atau kolom) ditambah dua.

Jika sourceArray dan destinationArray tumpang tindih, metode ini bersifat seolah-olah nilai sourceArray asli dipertahankan di lokasi sementara sebelum destinationArray ditimpa.

[C++]

Metode ini setara dengan fungsi memmoveC/C++ standar, bukan memcpy.

Array dapat berupa array jenis referensi atau array jenis nilai. Jenis downcasting dilakukan, sesuai kebutuhan.

  • Saat menyalin dari array jenis referensi ke array jenis nilai, setiap elemen tidak dikotak lalu disalin. Saat menyalin dari array jenis nilai ke array jenis referensi, setiap elemen dikotak lalu disalin.

  • Saat menyalin dari array jenis referensi atau jenis nilai ke Object array, Object dibuat untuk menahan setiap nilai atau referensi lalu disalin. Saat menyalin dari Object array ke array jenis referensi atau jenis nilai dan penugasan tidak dimungkinkan, dilemparkan InvalidCastException .

  • Jika sourceArray dan destinationArray keduanya adalah array jenis referensi atau keduanya adalah array jenis Object, salinan dangkal dilakukan. Salinan dangkal dari Array adalah referensi baru Array yang berisi ke elemen yang sama dengan aslinya Array. Elemen itu sendiri atau apa pun yang direferensikan oleh elemen tidak disalin. Sebaliknya, salinan mendalam dari Array salinan elemen dan semuanya secara langsung atau tidak langsung dirujuk oleh elemen.

ArrayTypeMismatchException dilemparkan jika array memiliki jenis yang tidak kompatibel. Kompatibilitas jenis didefinisikan sebagai berikut:

  • Jenis kompatibel dengan dirinya sendiri.

  • Jenis nilai kompatibel dengan Object dan dengan jenis antarmuka yang diimplementasikan oleh jenis nilai tersebut. Jenis nilai dianggap terhubung ke antarmuka hanya jika mengimplementasikan antarmuka tersebut secara langsung. Tipe terputus tidak kompatibel.

  • Dua jenis nilai intrinsik (sudah ditentukan sebelumnya) kompatibel jika menyalin dari jenis sumber ke jenis tujuan adalah konversi yang melebar. Konversi yang melebar tidak pernah kehilangan informasi, sedangkan konversi yang mempersempit dapat kehilangan informasi. Misalnya, mengonversi bilangan bulat bertanda 32-bit menjadi bilangan bulat bertanda tangan 64-bit adalah konversi yang melebar, dan mengonversi bilangan bulat bertanda tangan 64-bit menjadi bilangan bulat bertanda tangan 32-bit adalah konversi yang mempersempit. Untuk informasi selengkapnya tentang konversi, lihat Convert.

  • Jenis nilai nonintrinsic (ditentukan pengguna) hanya kompatibel dengan dirinya sendiri.

  • Enumerasi memiliki konversi implisit ke Enum dan ke jenis yang mendasarnya.

Jika setiap elemen dalam sourceArray memerlukan downcast (misalnya, dari kelas dasar ke kelas turunan atau dari antarmuka ke objek) dan satu atau beberapa elemen tidak dapat ditransmisikan ke jenis yang sesuai di destinationArray, dilemparkan InvalidCastException .

Jika metode ini memberikan pengecualian saat menyalin, status destinationArray tidak terdefinisi.

Metode ini adalah operasi O(n), di mana n adalah length.

Lihat juga

Berlaku untuk

Copy(Array, Array, Int32)

Sumber:
Array.CoreCLR.cs
Sumber:
Array.cs
Sumber:
Array.cs

Menyalin berbagai elemen dari awal Array pada elemen pertama dan menempelkannya ke elemen lain Array yang dimulai pada elemen pertama. Panjang ditentukan sebagai bilangan bulat 32-bit.

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

Array yang berisi data yang akan disalin.

destinationArray
Array

Array yang menerima data.

length
Int32

Bilangan bulat 32-bit yang menunjukkan jumlah elemen yang akan disalin.

Pengecualian

sourceArrayadalah null.

-atau-

destinationArrayadalah null.

sourceArray dan destinationArray memiliki peringkat yang berbeda.

sourceArray dan destinationArray merupakan jenis yang tidak kompatibel.

Setidaknya satu elemen di tidak dapat ditransmisikan sourceArray ke jenis destinationArray.

length kurang dari nol.

length lebih besar dari jumlah elemen dalam sourceArray.

-atau-

length lebih besar dari jumlah elemen dalam destinationArray.

Keterangan

Parameter sourceArray dan destinationArray harus memiliki jumlah dimensi yang sama. Selain itu, destinationArray harus sudah berdimensi dan harus memiliki jumlah elemen yang cukup untuk mengakomodasi data yang disalin.

Saat menyalin antara array multidimensi, array bertingkah seperti array satu dimensi yang panjang, di mana baris (atau kolom) secara konseptual diletakkan ujung ke ujung. Misalnya, jika array memiliki tiga baris (atau kolom) dengan masing-masing empat elemen, menyalin enam elemen dari awal array akan menyalin keempat elemen baris pertama (atau kolom) dan dua elemen pertama dari baris kedua (atau kolom).

Jika sourceArray dan destinationArray tumpang tindih, metode ini bersifat seolah-olah nilai sourceArray asli dipertahankan di lokasi sementara sebelum destinationArray ditimpa.

[C++]

Metode ini setara dengan fungsi memmoveC/C++ standar, bukan memcpy.

Array dapat berupa array jenis referensi atau array jenis nilai. Jenis downcasting dilakukan, sesuai kebutuhan.

  • Saat menyalin dari array jenis referensi ke array jenis nilai, setiap elemen tidak dikotak lalu disalin. Saat menyalin dari array jenis nilai ke array jenis referensi, setiap elemen dikotak lalu disalin.

  • Saat menyalin dari array jenis referensi atau jenis nilai ke Object array, Object dibuat untuk menahan setiap nilai atau referensi lalu disalin. Saat menyalin dari Object array ke array jenis referensi atau jenis nilai dan penugasan tidak dimungkinkan, dilemparkan InvalidCastException .

  • Jika sourceArray dan destinationArray keduanya adalah array jenis referensi atau keduanya adalah array jenis Object, salinan dangkal dilakukan. Salinan dangkal dari Array adalah referensi baru Array yang berisi ke elemen yang sama dengan aslinya Array. Elemen itu sendiri atau apa pun yang direferensikan oleh elemen tidak disalin. Sebaliknya, salinan mendalam dari Array salinan elemen dan semuanya secara langsung atau tidak langsung dirujuk oleh elemen.

ArrayTypeMismatchException dilemparkan jika array memiliki jenis yang tidak kompatibel. Kompatibilitas jenis didefinisikan sebagai berikut:

  • Jenis kompatibel dengan dirinya sendiri.

  • Jenis nilai kompatibel dengan Object dan dengan jenis antarmuka yang diimplementasikan oleh jenis nilai tersebut. Jenis nilai dianggap terhubung ke antarmuka hanya jika mengimplementasikan antarmuka tersebut secara langsung. Tipe terputus tidak kompatibel.

  • Dua jenis nilai intrinsik (sudah ditentukan sebelumnya) kompatibel jika menyalin dari jenis sumber ke jenis tujuan adalah konversi yang melebar. Konversi yang melebar tidak pernah kehilangan informasi, sedangkan konversi yang mempersempit dapat kehilangan informasi. Misalnya, mengonversi bilangan bulat bertanda 32-bit menjadi bilangan bulat bertanda tangan 64-bit adalah konversi yang melebar, dan mengonversi bilangan bulat bertanda tangan 64-bit menjadi bilangan bulat bertanda tangan 32-bit adalah konversi yang mempersempit. Untuk informasi selengkapnya tentang konversi, lihat Convert.

  • Jenis nilai nonintrinsic (ditentukan pengguna) hanya kompatibel dengan dirinya sendiri.

  • Enumerasi memiliki konversi implisit ke Enum dan ke jenis yang mendasarnya.

Jika setiap elemen dalam sourceArray memerlukan downcast (misalnya, dari kelas dasar ke kelas turunan atau dari antarmuka ke objek) dan satu atau beberapa elemen tidak dapat ditransmisikan ke jenis yang sesuai di destinationArray, dilemparkan InvalidCastException .

Jika metode ini memberikan pengecualian saat menyalin, status destinationArray tidak terdefinisi.

Metode ini adalah operasi O(n), di mana n adalah length.

Lihat juga

Berlaku untuk

Copy(Array, Array, Int64)

Sumber:
Array.cs
Sumber:
Array.cs
Sumber:
Array.cs

Menyalin berbagai elemen dari awal Array pada elemen pertama dan menempelkannya ke elemen lain Array yang dimulai pada elemen pertama. Panjang ditentukan sebagai bilangan bulat 64-bit.

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

Array yang berisi data yang akan disalin.

destinationArray
Array

Array yang menerima data.

length
Int64

Bilangan bulat 64-bit yang menunjukkan jumlah elemen yang akan disalin. Bilangan bulat harus antara nol dan Int32.MaxValue, inklusif.

Pengecualian

sourceArrayadalah null.

-atau-

destinationArrayadalah null.

sourceArray dan destinationArray memiliki peringkat yang berbeda.

sourceArray dan destinationArray merupakan jenis yang tidak kompatibel.

Setidaknya satu elemen di tidak dapat ditransmisikan sourceArray ke jenis destinationArray.

length kurang dari 0 atau lebih besar dari Int32.MaxValue.

length lebih besar dari jumlah elemen dalam sourceArray.

-atau-

length lebih besar dari jumlah elemen dalam destinationArray.

Keterangan

Parameter sourceArray dan destinationArray harus memiliki jumlah dimensi yang sama. Selain itu, destinationArray harus sudah berdimensi dan harus memiliki jumlah elemen yang cukup untuk mengakomodasi data yang disalin.

Saat menyalin antara array multidimensi, array bertingkah seperti array satu dimensi yang panjang, di mana baris (atau kolom) secara konseptual diletakkan ujung ke ujung. Misalnya, jika array memiliki tiga baris (atau kolom) dengan masing-masing empat elemen, menyalin enam elemen dari awal array akan menyalin keempat elemen baris pertama (atau kolom) dan dua elemen pertama dari baris kedua (atau kolom).

Jika sourceArray dan destinationArray tumpang tindih, metode ini bersifat seolah-olah nilai sourceArray asli dipertahankan di lokasi sementara sebelum destinationArray ditimpa.

[C++]

Metode ini setara dengan fungsi memmoveC/C++ standar, bukan memcpy.

Array dapat berupa array jenis referensi atau array jenis nilai. Jenis downcasting dilakukan, sesuai kebutuhan.

  • Saat menyalin dari array jenis referensi ke array jenis nilai, setiap elemen tidak dikotak lalu disalin. Saat menyalin dari array jenis nilai ke array jenis referensi, setiap elemen dikotak lalu disalin.

  • Saat menyalin dari array jenis referensi atau jenis nilai ke Object array, Object dibuat untuk menahan setiap nilai atau referensi lalu disalin. Saat menyalin dari Object array ke array jenis referensi atau jenis nilai dan penugasan tidak dimungkinkan, dilemparkan InvalidCastException .

  • Jika sourceArray dan destinationArray keduanya adalah array jenis referensi atau keduanya adalah array jenis Object, salinan dangkal dilakukan. Salinan dangkal dari Array adalah referensi baru Array yang berisi ke elemen yang sama dengan aslinya Array. Elemen itu sendiri atau apa pun yang direferensikan oleh elemen tidak disalin. Sebaliknya, salinan mendalam dari Array salinan elemen dan semuanya secara langsung atau tidak langsung dirujuk oleh elemen.

ArrayTypeMismatchException dilemparkan jika array memiliki jenis yang tidak kompatibel. Kompatibilitas jenis didefinisikan sebagai berikut:

  • Jenis kompatibel dengan dirinya sendiri.

  • Jenis nilai kompatibel dengan Object dan dengan jenis antarmuka yang diimplementasikan oleh jenis nilai tersebut. Jenis nilai dianggap terhubung ke antarmuka hanya jika mengimplementasikan antarmuka tersebut secara langsung. Tipe terputus tidak kompatibel.

  • Dua jenis nilai intrinsik (sudah ditentukan sebelumnya) kompatibel jika menyalin dari jenis sumber ke jenis tujuan adalah konversi yang melebar. Konversi yang melebar tidak pernah kehilangan informasi, sedangkan konversi yang mempersempit dapat kehilangan informasi. Misalnya, mengonversi bilangan bulat bertanda 32-bit menjadi bilangan bulat bertanda tangan 64-bit adalah konversi yang melebar, dan mengonversi bilangan bulat bertanda tangan 64-bit menjadi bilangan bulat bertanda tangan 32-bit adalah konversi yang mempersempit. Untuk informasi selengkapnya tentang konversi, lihat Convert.

  • Jenis nilai nonintrinsic (ditentukan pengguna) hanya kompatibel dengan dirinya sendiri.

  • Enumerasi memiliki konversi implisit ke Enum dan ke jenis yang mendasarnya.

Jika setiap elemen dalam sourceArray memerlukan downcast (misalnya, dari kelas dasar ke kelas turunan atau dari antarmuka ke objek) dan satu atau beberapa elemen tidak dapat ditransmisikan ke jenis yang sesuai di destinationArray, dilemparkan InvalidCastException .

Jika metode ini memberikan pengecualian saat menyalin, status destinationArray tidak terdefinisi.

Metode ini adalah operasi O(n), di mana n adalah length.

Lihat juga

Berlaku untuk