Array.Copy Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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)
- Kaynak:
- Array.cs
- Kaynak:
- Array.cs
- Kaynak:
- Array.cs
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
- sourceIndex
- Int64
Kopyalamanın başladığı dizini sourceArray
temsil eden 64 bitlik tamsayı.
- 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
ve destinationArray
farklı derecelere sahip.
sourceArray
ve destinationArray
uyumsuz türlerdedir.
içindeki sourceArray
en az bir öğe türüne destinationArray
yayı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 sourceArray
büyüktür.
-veya-
length
öğesinden destinationIndex
sonuna kadar olan öğe sayısından destinationArray
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 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 memmove
memcpy
eş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ü dizileriysesourceArray
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 destinationArray
karşı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)
- Kaynak:
- Array.CoreCLR.cs
- Kaynak:
- Array.cs
- Kaynak:
- Array.cs
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
- sourceIndex
- Int32
Kopyalamanın başladığı dizini sourceArray
temsil eden 32 bitlik tamsayı.
- 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
ve destinationArray
farklı derecelere sahip.
sourceArray
ve destinationArray
uyumsuz türlerdedir.
içindeki sourceArray
en az bir öğe türüne destinationArray
yayı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 sourceArray
büyüktür.
-veya-
length
öğesinden destinationIndex
sonuna kadar olan öğe sayısından destinationArray
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 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 memmove
eş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 isesourceArray
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 destinationArray
karşı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)
- Kaynak:
- Array.CoreCLR.cs
- Kaynak:
- Array.cs
- Kaynak:
- Array.cs
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
- length
- Int32
Kopyalanacak öğe sayısını temsil eden 32 bitlik bir tamsayı.
Özel durumlar
sourceArray
ve destinationArray
farklı derecelere sahip.
sourceArray
ve destinationArray
uyumsuz türlerdedir.
içindeki sourceArray
en az bir öğe türüne destinationArray
tü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 memmove
eş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 isesourceArray
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 destinationArray
karşı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)
- Kaynak:
- Array.cs
- Kaynak:
- Array.cs
- Kaynak:
- Array.cs
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
- 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
ve destinationArray
farklı derecelere sahip.
sourceArray
ve destinationArray
uyumsuz türlerdedir.
içindeki sourceArray
en az bir öğe türüne destinationArray
tü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 memmove
eş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 isesourceArray
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 destinationArray
karşı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
.