Array.Copy Yöntem

Tanım

Bir dizi öğeyi bir diğerine ArrayArray kopyalar ve tür atama ve kutulama işlemlerini gerektiği gibi gerçekleştirir.

Aşırı Yüklemeler

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

Belirtilen kaynak dizinden başlayan bir Array öğe aralığını kopyalar ve bunları belirtilen hedef dizinden başlayarak başka bir Array öğeye yapıştırır. Uzunluk ve dizinler 64 bit tamsayılar olarak belirtilir.

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

Belirtilen kaynak dizinden başlayan bir Array öğe aralığını kopyalar ve bunları belirtilen hedef dizinden başlayarak başka bir Array öğeye yapıştırır. Uzunluk ve dizinler 32 bit tamsayılar olarak belirtilir.

Copy(Array, Array, Int32)

İlk öğedeki bir başlangıç öğesinden bir Array öğe aralığını kopyalar ve bunları ilk öğeden başlayarak başka bir Array öğeye yapıştırır. Uzunluk 32 bit tamsayı olarak belirtilir.

Copy(Array, Array, Int64)

İlk öğedeki bir başlangıç öğesinden bir Array öğe aralığını kopyalar ve bunları ilk öğeden başlayarak başka bir Array öğeye yapıştırır. Uzunluk 64 bit tamsayı olarak belirtilir.

Örnekler

Aşağıdaki kod örneği, türün birinden başka Array bir Array tür Object tamsayıya nasıl kopyalanacaklarını gösterir.

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)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Belirtilen kaynak dizinden başlayan bir Array öğe aralığını kopyalar ve bunları belirtilen hedef dizinden başlayarak başka bir Array öğeye yapıştırır. Uzunluk ve dizinler 64 bit tamsayılar olarak belirtilir.

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)

Parametreler

sourceArray
Array

Kopyalanacak Array verileri içeren.

sourceIndex
Int64

Kopyalamanın başladığı dizini sourceArray temsil eden 64 bitlik tamsayı.

destinationArray
Array

Array Verileri alan.

destinationIndex
Int64

Depolamanın başladığı dizinini destinationArray temsil eden 64 bitlik tamsayı.

length
Int64

Kopyalanacak öğe sayısını temsil eden 64 bitlik bir tamsayı. Tamsayı sıfır ile Int32.MaxValue (dahil) arasında olmalıdır.

Özel durumlar

sourceArray, null değeridir.

-veya-

destinationArray, null değeridir.

sourceArray ve destinationArray farklı derecelere sahip.

sourceArray ve destinationArray uyumsuz türlerdedir.

içindeki sourceArray en az bir öğe türüne destinationArrayyayınlanamaz.

sourceIndex , için geçerli dizin aralığının dışındadır sourceArray.

-veya-

destinationIndex , için geçerli dizin aralığının dışındadır destinationArray.

-veya-

length 0'dan küçük veya Int32.MaxValue değerinden büyük.

length öğesinden sourceIndex sonuna kadar olan öğe sayısından sourceArraybüyüktür.

-veya-

length öğesinden destinationIndex sonuna kadar olan öğe sayısından destinationArraybüyüktür.

Açıklamalar

sourceArray ve destinationArray parametreleri aynı sayıda boyuta sahip olmalıdır. Ayrıca, destinationArray zaten boyutlandırılmış olmalı ve kopyalanan verileri barındırmak için konumdan destinationIndex başlayarak yeterli sayıda öğeye sahip olmalıdır.

Çok boyutlu diziler arasında kopyalama yaparken, dizi, satırların (veya sütunların) kavramsal olarak uçtan uca yerleştirildiği uzun bir tek boyutlu dizi gibi davranır. Örneğin, bir dizide her biri dört öğe içeren üç satır (veya sütun) varsa, dizinin başından altı öğe kopyalandığında ilk satırdaki (veya sütundaki) dört öğenin tümü ve ikinci satırdaki (veya sütundaki) ilk iki öğe kopyalanır. Üçüncü satırın (veya sütunun) ikinci öğesinden kopyalamaya başlamak için, sourceIndex ilk satırın (veya sütunun) üst sınırı ve ikinci satırın (veya sütunun) uzunluğu artı iki olmalıdır.

Ve çakışıyorsasourceArray, bu yöntem özgün değerlerinin sourceArray üzerine yazılmadan önce destinationArray geçici bir konumda korunmuş gibi davranır.destinationArray

[C++]

Bu yöntem, yerine standart C/C++ işlevine memmovememcpyeşdeğerdir.

Diziler, başvuru türü veya değer türü diziler olabilir. Gerektiği gibi, tür alta dönüştürme işlemi gerçekleştirilir.

  • Bir başvuru türü dizisinden bir değer türü dizisine kopyalama yapılırken, her öğe kutudan çıkarılır ve sonra kopyalanır. Bir değer türü dizisinden başvuru türü dizisine kopyalarken, her öğe kutudan çıkarılır ve sonra kopyalanır.

  • Başvuru türü veya değer türü dizisinden bir Object diziye kopyalarken, her değeri veya başvuruyı tutmak için bir Object oluşturulur ve sonra kopyalanır. Bir Object diziden başvuru türüne veya değer türündeki bir diziye kopyalandığında ve atama mümkün olmadığında bir InvalidCastException oluşturulur.

  • ve destinationArray her ikisi de başvuru türü dizileriyse sourceArray veya her ikisi de türünde Objectdiziyse, sığ bir kopya gerçekleştirilir. basit bir Array kopyası, özgün Arrayile aynı öğelere başvurular içeren yeni Array bir kopyadır. Öğelerin kendileri veya öğelerin başvurdukları herhangi bir şey kopyalanmaz. Buna karşılık, bir dosyanın derin bir Array kopyası öğeleri ve öğeler tarafından doğrudan veya dolaylı olarak başvuruda bulunılan her şeyi kopyalar.

Diziler uyumsuz türlerdeyse bir ArrayTypeMismatchException oluşturulur. Tür uyumluluğu aşağıdaki gibi tanımlanır:

  • Tür, kendisiyle uyumludur.

  • Bir değer türü, ve ile bu değer türü tarafından uygulanan bir arabirim türüyle uyumludur Object . Bir değer türü, yalnızca bir arabirimi doğrudan uyguluyorsa o arabirime bağlı olarak kabul edilir. Bağlantısı kesilen türler uyumlu değil.

  • Kaynak türden hedef türe kopyalama genişleyen bir dönüştürme ise, iki koşulsuz (önceden tanımlanmış) değer türü uyumludur. Genişleyen bir dönüştürmede bilgiler asla kaybolmaz, ancak daralan bir dönüştürmede bilgi kaybı olabilir. Örneğin, 32 bit işaretli bir tamsayıyı 64 bit işaretli bir tamsayıya dönüştürmek genişleyen dönüştürme, 64 bit işaretli bir tamsayıyı 34 bit işaretli bir tamsayıya dönüştürmek ise daralan dönüştürmedir. Dönüştürmeler hakkında daha fazla bilgi için bkz Convert. .

  • Koşullu (kullanıcı tanımlı) bir değer türü yalnızca kendisi ile uyumludur.

  • Sabit listeleri, temel türüne Enum ve türüne örtük bir dönüştürmeye sahiptir.

içindeki sourceArray her öğe bir alt noktaya yayın gerektiriyorsa (örneğin, bir temel sınıftan türetilmiş bir sınıfa veya bir arabirimden bir nesneye) ve bir veya daha fazla öğe içinde destinationArraykarşılık gelen türe atanamıyorsa, bir InvalidCastException oluşturulur.

Bu yöntem kopyalama sırasında bir özel durum oluşturursa, durumu destinationArray tanımsız olur.

Bu yöntem bir O(n) işlemidir ve burada n olur length.

Ayrıca bkz.

Şunlara uygulanır

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

Source:
Array.CoreCLR.cs
Source:
Array.cs
Source:
Array.cs

Belirtilen kaynak dizinden başlayan bir Array öğe aralığını kopyalar ve bunları belirtilen hedef dizinden başlayarak başka bir Array öğeye yapıştırır. Uzunluk ve dizinler 32 bit tamsayılar olarak belirtilir.

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)

Parametreler

sourceArray
Array

Kopyalanacak Array verileri içeren.

sourceIndex
Int32

Kopyalamanın başladığı dizini sourceArray temsil eden 32 bitlik tamsayı.

destinationArray
Array

Array Verileri alan.

destinationIndex
Int32

Depolamanın başladığı dizinini destinationArray temsil eden 32 bitlik tamsayı.

length
Int32

Kopyalanacak öğe sayısını temsil eden 32 bitlik tamsayı.

Özel durumlar

sourceArray, null değeridir.

-veya-

destinationArray, null değeridir.

sourceArray ve destinationArray farklı derecelere sahip.

sourceArray ve destinationArray uyumsuz türlerdedir.

içindeki sourceArray en az bir öğe türüne destinationArrayyayınlanamaz.

sourceIndex , öğesinin ilk boyutunun alt sınırından küçüktür sourceArray.

-veya-

destinationIndex , öğesinin ilk boyutunun alt sınırından küçüktür destinationArray.

-veya-

length, sıfırdan küçüktür.

length öğesinden sourceIndex sonuna kadar olan öğe sayısından sourceArraybüyüktür.

-veya-

length öğesinden destinationIndex sonuna kadar olan öğe sayısından destinationArraybüyüktür.

Açıklamalar

sourceArray ve destinationArray parametreleri aynı sayıda boyuta sahip olmalıdır. Ayrıca, destinationArray zaten boyutlandırılmış olmalı ve kopyalanan verileri barındırmak için konumdan destinationIndex başlayarak yeterli sayıda öğeye sahip olmalıdır.

Çok boyutlu diziler arasında kopyalama yaparken, dizi, satırların (veya sütunların) kavramsal olarak uçtan uca yerleştirildiği uzun bir tek boyutlu dizi gibi davranır. Örneğin, bir dizide her biri dört öğe içeren üç satır (veya sütun) varsa, dizinin başından altı öğe kopyalandığında ilk satırdaki (veya sütundaki) dört öğenin tümü ve ikinci satırdaki (veya sütundaki) ilk iki öğe kopyalanır. Üçüncü satırın (veya sütunun) ikinci öğesinden kopyalamaya başlamak için, sourceIndex ilk satırın (veya sütunun) üst sınırı ve ikinci satırın (veya sütunun) uzunluğu artı iki olmalıdır.

Ve çakışıyorsasourceArray, bu yöntem özgün değerlerinin sourceArray üzerine yazılmadan önce destinationArray geçici bir konumda korunmuş gibi davranır.destinationArray

[C++]

Bu yöntem, standart C/C++ işleviyle memmoveeşdeğerdir, değil memcpy.

Diziler, başvuru türü veya değer türü diziler olabilir. Gerektiği gibi, tür alta dönüştürme işlemi gerçekleştirilir.

  • Bir başvuru türü dizisinden bir değer türü dizisine kopyalama yapılırken, her öğe kutudan çıkarılır ve sonra kopyalanır. Bir değer türü dizisinden başvuru türü dizisine kopyalarken, her öğe kutudan çıkarılır ve sonra kopyalanır.

  • Bir başvuru türü veya değer türü dizisinden bir Object diziye kopyalanırken, her değeri veya başvuru için bir Object oluşturulur ve sonra kopyalanır. Bir Object diziden başvuru türü veya değer türü diziye kopyalama yapılırken ve atama mümkün olmadığında, bir InvalidCastException oluşturulur.

  • ve destinationArray her ikisi de başvuru türündeki diziler ise sourceArray veya her ikisi de türünde Objectdiziyse, sığ bir kopya gerçekleştirilir. basit bir Array kopyası, özgün Arrayile aynı öğelere başvurular içeren yeni Array bir kopyadır. Öğelerin kendileri veya öğelerin başvurdukları herhangi bir şey kopyalanmaz. Buna karşılık, bir öğenin derin kopyası Array öğeleri ve öğeler tarafından doğrudan veya dolaylı olarak başvuruda bulunılan her şeyi kopyalar.

Diziler uyumsuz türlerdeyse bir ArrayTypeMismatchException oluşturulur. Tür uyumluluğu aşağıdaki gibi tanımlanır:

  • Tür, kendisiyle uyumludur.

  • Bir değer türü, ve ile bu değer türü tarafından uygulanan bir arabirim türüyle uyumludur Object . Bir değer türü, yalnızca bir arabirimi doğrudan uyguluyorsa o arabirime bağlı olarak kabul edilir. Bağlantısı kesilen türler uyumlu değil.

  • Kaynak türden hedef türe kopyalama genişleyen bir dönüştürme ise, iki koşulsuz (önceden tanımlanmış) değer türü uyumludur. Genişleyen bir dönüştürmede bilgiler asla kaybolmaz, ancak daralan bir dönüştürmede bilgi kaybı olabilir. Örneğin, 32 bit işaretli bir tamsayıyı 64 bit işaretli bir tamsayıya dönüştürmek genişleyen dönüştürme, 64 bit işaretli bir tamsayıyı 34 bit işaretli bir tamsayıya dönüştürmek ise daralan dönüştürmedir. Dönüştürmeler hakkında daha fazla bilgi için bkz Convert. .

  • Koşullu (kullanıcı tanımlı) bir değer türü yalnızca kendisi ile uyumludur.

  • Sabit listeleri, temel alınan türüne Enum ve türüne örtük bir dönüştürmeye sahiptir.

içindeki sourceArray her öğe bir aşağı yayın gerektiriyorsa (örneğin, bir temel sınıftan türetilmiş bir sınıfa veya bir arabirimden bir nesneye) ve bir veya daha fazla öğe içinde destinationArraykarşılık gelen türe atanamıyorsa, bir InvalidCastException oluşturulur.

Bu yöntem kopyalama sırasında bir özel durum oluşturursa, durumu destinationArray tanımlanmamış olur.

Bu yöntem bir O(n) işlemidir; burada n olur length.

Ayrıca bkz.

Şunlara uygulanır

Copy(Array, Array, Int32)

Source:
Array.CoreCLR.cs
Source:
Array.cs
Source:
Array.cs

İlk öğedeki bir başlangıç öğesinden bir Array öğe aralığını kopyalar ve bunları ilk öğeden başlayarak başka bir Array öğeye yapıştırır. Uzunluk 32 bitlik bir tamsayı olarak belirtilir.

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)

Parametreler

sourceArray
Array

Array Kopyalanacak verileri içeren.

destinationArray
Array

Array Verileri alan.

length
Int32

Kopyalanacak öğe sayısını temsil eden 32 bitlik bir tamsayı.

Özel durumlar

sourceArray, null değeridir.

-veya-

destinationArray, null değeridir.

sourceArray ve destinationArray farklı derecelere sahip.

sourceArray ve destinationArray uyumsuz türlerdedir.

içindeki sourceArray en az bir öğe türüne destinationArraytürlenemez.

length, sıfırdan küçüktür.

length , içindeki sourceArrayöğe sayısından büyüktür.

-veya-

length , içindeki destinationArrayöğe sayısından büyüktür.

Açıklamalar

sourceArray ve destinationArray parametreleri aynı sayıda boyuta sahip olmalıdır. Ayrıca, destinationArray zaten boyutlandırılmış olmalı ve kopyalanan verileri barındırmak için yeterli sayıda öğeye sahip olmalıdır.

Çok boyutlu diziler arasında kopyalama yaparken, dizi, satırların (veya sütunların) kavramsal olarak uçtan uca yerleştirildiği uzun bir tek boyutlu dizi gibi davranır. Örneğin, bir dizide her biri dört öğe içeren üç satır (veya sütun) varsa, dizinin başından altı öğe kopyalandığında ilk satırdaki (veya sütundaki) dört öğenin tümü ve ikinci satırdaki (veya sütundaki) ilk iki öğe kopyalanır.

ve çakışıyorsasourceArray, bu yöntem özgün değerlerinin sourceArray üzerine yazılmadan önce destinationArray geçici bir konumda korunmuş gibi davranır.destinationArray

[C++]

Bu yöntem, standart C/C++ işleviyle memmoveeşdeğerdir, değil memcpy.

Diziler, başvuru türü veya değer türü diziler olabilir. Gerektiği gibi, tür alta dönüştürme işlemi gerçekleştirilir.

  • Bir başvuru türü dizisinden bir değer türü dizisine kopyalama yapılırken, her öğe kutudan çıkarılır ve sonra kopyalanır. Bir değer türü dizisinden başvuru türü dizisine kopyalarken, her öğe kutudan çıkarılır ve sonra kopyalanır.

  • Bir başvuru türü veya değer türü dizisinden bir Object diziye kopyalanırken, her değeri veya başvuru için bir Object oluşturulur ve sonra kopyalanır. Bir Object diziden başvuru türü veya değer türü diziye kopyalama yapılırken ve atama mümkün olmadığında, bir InvalidCastException oluşturulur.

  • ve destinationArray her ikisi de başvuru türündeki diziler ise sourceArray veya her ikisi de türünde Objectdiziyse, sığ bir kopya gerçekleştirilir. basit bir Array kopyası, özgün Arrayile aynı öğelere başvurular içeren yeni Array bir kopyadır. Öğelerin kendileri veya öğelerin başvurdukları herhangi bir şey kopyalanmaz. Buna karşılık, bir öğenin derin kopyası Array öğeleri ve öğeler tarafından doğrudan veya dolaylı olarak başvuruda bulunılan her şeyi kopyalar.

Diziler uyumsuz türlerdeyse bir ArrayTypeMismatchException oluşturulur. Tür uyumluluğu aşağıdaki gibi tanımlanır:

  • Tür, kendisiyle uyumludur.

  • Bir değer türü, ve ile bu değer türü tarafından uygulanan bir arabirim türüyle uyumludur Object . Bir değer türü, yalnızca bir arabirimi doğrudan uyguluyorsa o arabirime bağlı olarak kabul edilir. Bağlantısı kesilen türler uyumlu değil.

  • Kaynak türden hedef türe kopyalama genişleyen bir dönüştürme ise, iki koşulsuz (önceden tanımlanmış) değer türü uyumludur. Genişleyen bir dönüştürmede bilgiler asla kaybolmaz, ancak daralan bir dönüştürmede bilgi kaybı olabilir. Örneğin, 32 bit işaretli bir tamsayıyı 64 bit işaretli bir tamsayıya dönüştürmek genişleyen dönüştürme, 64 bit işaretli bir tamsayıyı 34 bit işaretli bir tamsayıya dönüştürmek ise daralan dönüştürmedir. Dönüştürmeler hakkında daha fazla bilgi için bkz Convert. .

  • Koşullu (kullanıcı tanımlı) bir değer türü yalnızca kendisi ile uyumludur.

  • Sabit listeleri, temel alınan türüne Enum ve türüne örtük bir dönüştürmeye sahiptir.

içindeki sourceArray her öğe bir aşağı yayın gerektiriyorsa (örneğin, bir temel sınıftan türetilmiş bir sınıfa veya bir arabirimden bir nesneye) ve bir veya daha fazla öğe içinde destinationArraykarşılık gelen türe atanamıyorsa, bir InvalidCastException oluşturulur.

Bu yöntem kopyalama sırasında bir özel durum oluşturursa, durumu destinationArray tanımlanmamış olur.

Bu yöntem bir O(n) işlemidir; burada n olur length.

Ayrıca bkz.

Şunlara uygulanır

Copy(Array, Array, Int64)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

İlk öğedeki bir başlangıç öğesinden bir Array öğe aralığını kopyalar ve bunları ilk öğeden başlayarak başka bir Array öğeye yapıştırır. Uzunluk 64 bitlik bir tamsayı olarak belirtilir.

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)

Parametreler

sourceArray
Array

Array Kopyalanacak verileri içeren.

destinationArray
Array

Array Verileri alan.

length
Int64

Kopyalanacak öğe sayısını temsil eden 64 bitlik bir tamsayı. Tamsayı sıfır ile Int32.MaxValue (dahil) arasında olmalıdır.

Özel durumlar

sourceArray, null değeridir.

-veya-

destinationArray, null değeridir.

sourceArray ve destinationArray farklı derecelere sahip.

sourceArray ve destinationArray uyumsuz türlerdedir.

içindeki sourceArray en az bir öğe türüne destinationArraytürlenemez.

length 0'dan küçük veya Int32.MaxValue değerinden büyük.

length , içindeki sourceArrayöğe sayısından büyüktür.

-veya-

length , içindeki destinationArrayöğe sayısından büyüktür.

Açıklamalar

sourceArray ve destinationArray parametreleri aynı sayıda boyuta sahip olmalıdır. Ayrıca, destinationArray zaten boyutlandırılmış olmalı ve kopyalanan verileri barındırmak için yeterli sayıda öğeye sahip olmalıdır.

Çok boyutlu diziler arasında kopyalama yaparken, dizi, satırların (veya sütunların) kavramsal olarak uçtan uca yerleştirildiği uzun bir tek boyutlu dizi gibi davranır. Örneğin, bir dizide her biri dört öğe içeren üç satır (veya sütun) varsa, dizinin başından altı öğe kopyalandığında ilk satırdaki (veya sütundaki) dört öğenin tümü ve ikinci satırdaki (veya sütundaki) ilk iki öğe kopyalanır.

ve çakışıyorsasourceArray, bu yöntem özgün değerlerinin sourceArray üzerine yazılmadan önce destinationArray geçici bir konumda korunmuş gibi davranır.destinationArray

[C++]

Bu yöntem, standart C/C++ işleviyle memmoveeşdeğerdir, değil memcpy.

Diziler, başvuru türü veya değer türü diziler olabilir. Gerektiği gibi, tür alta dönüştürme işlemi gerçekleştirilir.

  • Bir başvuru türü dizisinden bir değer türü dizisine kopyalama yapılırken, her öğe kutudan çıkarılır ve sonra kopyalanır. Bir değer türü dizisinden başvuru türü dizisine kopyalarken, her öğe kutudan çıkarılır ve sonra kopyalanır.

  • Bir başvuru türü veya değer türü dizisinden bir Object diziye kopyalanırken, her değeri veya başvuru için bir Object oluşturulur ve sonra kopyalanır. Bir Object diziden başvuru türü veya değer türü diziye kopyalama yapılırken ve atama mümkün olmadığında, bir InvalidCastException oluşturulur.

  • ve destinationArray her ikisi de başvuru türündeki diziler ise sourceArray veya her ikisi de türünde Objectdiziyse, sığ bir kopya gerçekleştirilir. basit bir Array kopyası, özgün Arrayile aynı öğelere başvurular içeren yeni Array bir kopyadır. Öğelerin kendileri veya öğelerin başvurdukları herhangi bir şey kopyalanmaz. Buna karşılık, bir öğenin derin kopyası Array öğeleri ve öğeler tarafından doğrudan veya dolaylı olarak başvuruda bulunılan her şeyi kopyalar.

Diziler uyumsuz türlerdeyse bir ArrayTypeMismatchException oluşturulur. Tür uyumluluğu aşağıdaki gibi tanımlanır:

  • Tür, kendisiyle uyumludur.

  • Bir değer türü, ve ile bu değer türü tarafından uygulanan bir arabirim türüyle uyumludur Object . Bir değer türü, yalnızca bir arabirimi doğrudan uyguluyorsa o arabirime bağlı olarak kabul edilir. Bağlantısı kesilen türler uyumlu değil.

  • Kaynak türden hedef türe kopyalama genişleyen bir dönüştürme ise, iki koşulsuz (önceden tanımlanmış) değer türü uyumludur. Genişleyen bir dönüştürmede bilgiler asla kaybolmaz, ancak daralan bir dönüştürmede bilgi kaybı olabilir. Örneğin, 32 bit işaretli bir tamsayıyı 64 bit işaretli bir tamsayıya dönüştürmek genişleyen dönüştürme, 64 bit işaretli bir tamsayıyı 34 bit işaretli bir tamsayıya dönüştürmek ise daralan dönüştürmedir. Dönüştürmeler hakkında daha fazla bilgi için bkz Convert. .

  • Koşullu (kullanıcı tanımlı) bir değer türü yalnızca kendisi ile uyumludur.

  • Sabit listeleri, temel alınan türüne Enum ve türüne örtük bir dönüştürmeye sahiptir.

içindeki sourceArray her öğe bir aşağı yayın gerektiriyorsa (örneğin, bir temel sınıftan türetilmiş bir sınıfa veya bir arabirimden bir nesneye) ve bir veya daha fazla öğe içinde destinationArraykarşılık gelen türe atanamıyorsa, bir InvalidCastException oluşturulur.

Bu yöntem kopyalama sırasında bir özel durum oluşturursa, durumu destinationArray tanımlanmamış olur.

Bu yöntem bir O(n) işlemidir; burada n olur length.

Ayrıca bkz.

Şunlara uygulanır