Array.Copy Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
| Name | Description |
|---|---|
| Copy(Array, Int64, Array, Int64, Int64) |
Zkopíruje rozsah prvků od zadaného zdrojového indexu a vloží je do jiného ArrayArray počínaje zadaným cílovým indexem. Délka a indexy se zadají jako 64bitová celá čísla. |
| Copy(Array, Int32, Array, Int32, Int32) |
Zkopíruje rozsah prvků od zadaného zdrojového indexu a vloží je do jiného ArrayArray počínaje zadaným cílovým indexem. Délka a indexy se zadají jako 32bitová celá čísla. |
| Copy(Array, Array, Int32) |
Zkopíruje rozsah prvků od Array prvního prvku a vloží je do jiného Array počínaje prvním prvkem. Délka je určena jako 32bitové celé číslo. |
| Copy(Array, Array, Int64) |
Zkopíruje rozsah prvků od Array prvního prvku a vloží je do jiného Array počínaje prvním prvkem. Délka je zadána jako 64bitové celé číslo. |
Příklady
Následující příklad kódu ukazuje, jak kopírovat z jednoho Array typu Object do jiného Array typu integer.
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)
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- 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)
Parametry
- sourceIndex
- Int64
64bitové celé číslo, které představuje index, ve sourceArray kterém začíná kopírování.
- destinationIndex
- Int64
64bitové celé číslo, které představuje index, ve destinationArray kterém začíná ukládání.
- length
- Int64
64bitové celé číslo, které představuje počet prvků, které se mají zkopírovat. Celé číslo musí být mezi nulou a Int32.MaxValue (včetně).
Výjimky
sourceArray a destinationArray mají různé pořadí.
sourceArray a destinationArray jsou nekompatibilních typů.
Nejméně jeden prvek nelze sourceArray přetypovat na typ destinationArray.
sourceIndex je mimo rozsah platných indexů pro sourceArray.
nebo
destinationIndex je mimo rozsah platných indexů pro destinationArray.
nebo
length je menší než 0 nebo větší než Int32.MaxValue.
lengthje větší než počet prvků od sourceIndex konce .sourceArray
nebo
lengthje větší než počet prvků od destinationIndex konce .destinationArray
Poznámky
sourceArray Parametry destinationArray musí mít stejný počet dimenzí. Kromě toho destinationArray musí být již rozměrován a musí mít dostatečný počet prvků, které začínají od destinationIndex pozice pro přizpůsobení zkopírovaných dat.
Při kopírování mezi multidimenzionálními poli se pole chová jako dlouhé jednorozměrné pole, kde jsou řádky (nebo sloupce) koncepčně rozložené na konci. Pokud má například matice tři řádky (nebo sloupce) se čtyřmi prvky, zkopírování šesti prvků od začátku pole zkopíruje všechny čtyři prvky prvního řádku (nebo sloupce) a první dva prvky druhého řádku (nebo sloupce). Chcete-li začít kopírovat z druhého prvku třetího řádku (nebo sloupce), sourceIndex musí být horní mez prvního řádku (nebo sloupce) plus délka druhého řádku (nebo sloupce) plus dva.
Pokud sourceArray a destinationArray překrývají se, tato metoda se chová, jako by původní hodnoty sourceArray byly zachovány v dočasném umístění před destinationArray přepsání.
[C++]
Tato metoda je ekvivalentní standardní funkci memmoveC/C++ , nikoli memcpy.
Matice můžou být matice typu odkaz nebo matice typu hodnoty. Podle potřeby se provádí downcasting typu.
Při kopírování z pole typu odkazu do pole typu hodnota je každý prvek unboxed a poté zkopírován. Při kopírování z pole typu hodnota do pole typu odkazu je každý prvek boxován a poté zkopírován.
Při kopírování z pole typu odkazu nebo typu hodnoty do Object pole se vytvoří pole, které Object bude obsahovat každou hodnotu nebo odkaz a pak se zkopíruje. Při kopírování z Object pole do pole typu odkazu nebo typu hodnoty a přiřazení není možné, InvalidCastException vyvolá se.
Jsou-li
sourceArrayobědestinationArraymatice typu odkaz nebo jsou obě matice typu Object, provede se mělká kopie. Mělká kopie je Array nová Array , která obsahuje odkazy na stejné prvky jako původní Array. Samotné prvky nebo cokoli, na co odkazují prvky, se nekopírují. Naproti tomu hloubková Array kopie prvků a všech prvků přímo nebo nepřímo odkazovaných prvky.
Vyvolá ArrayTypeMismatchException se, pokud pole jsou nekompatibilních typů. Kompatibilita typů je definována takto:
Typ je kompatibilní se samotným.
Typ hodnoty je kompatibilní s Object typem rozhraní implementovaným tímto typem hodnoty. Typ hodnoty je považován za připojený k rozhraní pouze v případě, že implementuje toto rozhraní přímo. Odpojené typy nejsou kompatibilní.
Dva vnitřní (předdefinované) typy hodnot jsou kompatibilní, pokud kopírování ze zdrojového typu do cílového typu je rozšiřující převod. Rozšiřující převod nikdy neztratí informace, zatímco zužující převod může ztratit informace. Například převod 32bitového celého čísla se signedménka na 64bitové celé číslo se signy je rozšiřující převod a převod 64bitového celého čísla se signedem na 32bitové celé číslo se zúžením. Další informace o převodech naleznete v tématu Convert.
Neintrinsický (uživatelem definovaný) typ hodnoty je kompatibilní pouze se samotným.
Výčty mají implicitní převod na Enum základní typ a na jejich základní typ.
Pokud každý prvek v sourceArray vyžaduje downcast (například ze základní třídy do odvozené třídy nebo z rozhraní objektu) a jeden nebo více prvků nelze přetypovat na odpovídající typ v destinationArray, InvalidCastException je vyvolán.
Pokud tato metoda vyvolá výjimku při kopírování, stav destinationArray je nedefinován.
Tato metoda je operace O(n), kde n je length.
Viz také
Platí pro
Copy(Array, Int32, Array, Int32, Int32)
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- Array.CoreCLR.cs
- Zdroj:
- Array.cs
- Zdroj:
- 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)
Parametry
- sourceIndex
- Int32
32bitové celé číslo, které představuje index, ve sourceArray kterém začíná kopírování.
- destinationIndex
- Int32
32bitové celé číslo, které představuje index, ve destinationArray kterém začíná ukládání.
- length
- Int32
32bitové celé číslo, které představuje počet prvků, které se mají zkopírovat.
Výjimky
sourceArray a destinationArray mají různé pořadí.
sourceArray a destinationArray jsou nekompatibilních typů.
Nejméně jeden prvek nelze sourceArray přetypovat na typ destinationArray.
sourceIndex je menší než dolní mez první dimenze sourceArray.
nebo
destinationIndex je menší než dolní mez první dimenze destinationArray.
nebo
Hodnota length je menší než nula.
lengthje větší než počet prvků od sourceIndex konce .sourceArray
nebo
lengthje větší než počet prvků od destinationIndex konce .destinationArray
Poznámky
sourceArray Parametry destinationArray musí mít stejný počet dimenzí. Kromě toho destinationArray musí být již rozměrován a musí mít dostatečný počet prvků, které začínají od destinationIndex pozice pro přizpůsobení zkopírovaných dat.
Při kopírování mezi multidimenzionálními poli se pole chová jako dlouhé jednorozměrné pole, kde jsou řádky (nebo sloupce) koncepčně rozložené na konci. Pokud má například matice tři řádky (nebo sloupce) se čtyřmi prvky, zkopírování šesti prvků od začátku pole zkopíruje všechny čtyři prvky prvního řádku (nebo sloupce) a první dva prvky druhého řádku (nebo sloupce). Chcete-li začít kopírovat z druhého prvku třetího řádku (nebo sloupce), sourceIndex musí být horní mez prvního řádku (nebo sloupce) plus délka druhého řádku (nebo sloupce) plus dva.
Pokud sourceArray a destinationArray překrývají se, tato metoda se chová, jako by původní hodnoty sourceArray byly zachovány v dočasném umístění před destinationArray přepsání.
[C++]
Tato metoda je ekvivalentní standardní funkci memmoveC/C++ , nikoli memcpy.
Matice můžou být matice typu odkaz nebo matice typu hodnoty. Podle potřeby se provádí downcasting typu.
Při kopírování z pole typu odkazu do pole typu hodnota je každý prvek unboxed a poté zkopírován. Při kopírování z pole typu hodnota do pole typu odkazu je každý prvek boxován a poté zkopírován.
Při kopírování z pole typu odkazu nebo typu hodnoty do Object pole se vytvoří pole, které Object bude obsahovat každou hodnotu nebo odkaz a pak se zkopíruje. Při kopírování z Object pole do pole typu odkazu nebo typu hodnoty a přiřazení není možné, InvalidCastException vyvolá se.
Jsou-li
sourceArrayobědestinationArraymatice typu odkaz nebo jsou obě matice typu Object, provede se mělká kopie. Mělká kopie je Array nová Array , která obsahuje odkazy na stejné prvky jako původní Array. Samotné prvky nebo cokoli, na co odkazují prvky, se nekopírují. Naproti tomu hloubková Array kopie prvků a všech prvků přímo nebo nepřímo odkazovaných prvky.
Vyvolá ArrayTypeMismatchException se, pokud pole jsou nekompatibilních typů. Kompatibilita typů je definována takto:
Typ je kompatibilní se samotným.
Typ hodnoty je kompatibilní s Object typem rozhraní implementovaným tímto typem hodnoty. Typ hodnoty je považován za připojený k rozhraní pouze v případě, že implementuje toto rozhraní přímo. Odpojené typy nejsou kompatibilní.
Dva vnitřní (předdefinované) typy hodnot jsou kompatibilní, pokud kopírování ze zdrojového typu do cílového typu je rozšiřující převod. Rozšiřující převod nikdy neztratí informace, zatímco zužující převod může ztratit informace. Například převod 32bitového celého čísla se signedménka na 64bitové celé číslo se signy je rozšiřující převod a převod 64bitového celého čísla se signedem na 32bitové celé číslo se zúžením. Další informace o převodech naleznete v tématu Convert.
Neintrinsický (uživatelem definovaný) typ hodnoty je kompatibilní pouze se samotným.
Výčty mají implicitní převod na Enum základní typ a na jejich základní typ.
Pokud každý prvek v sourceArray vyžaduje downcast (například ze základní třídy do odvozené třídy nebo z rozhraní objektu) a jeden nebo více prvků nelze přetypovat na odpovídající typ v destinationArray, InvalidCastException je vyvolán.
Pokud tato metoda vyvolá výjimku při kopírování, stav destinationArray je nedefinován.
Tato metoda je operace O(n), kde n je length.
Viz také
Platí pro
Copy(Array, Array, Int32)
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- Array.CoreCLR.cs
- Zdroj:
- Array.cs
- Zdroj:
- 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)
Parametry
- length
- Int32
32bitové celé číslo, které představuje počet prvků, které se mají zkopírovat.
Výjimky
sourceArray a destinationArray mají různé pořadí.
sourceArray a destinationArray jsou nekompatibilních typů.
Nejméně jeden prvek nelze sourceArray přetypovat na typ destinationArray.
Hodnota length je menší než nula.
length je větší než počet prvků v sourceArray.
nebo
length je větší než počet prvků v destinationArray.
Poznámky
sourceArray Parametry destinationArray musí mít stejný počet dimenzí. Kromě toho destinationArray musí být již dimenze a musí mít dostatečný počet prvků pro přizpůsobení zkopírovaných dat.
Při kopírování mezi multidimenzionálními poli se pole chová jako dlouhé jednorozměrné pole, kde jsou řádky (nebo sloupce) koncepčně rozložené na konec. Pokud má například matice tři řádky (nebo sloupce) se čtyřmi prvky, zkopírování šesti prvků od začátku pole zkopíruje všechny čtyři prvky prvního řádku (nebo sloupce) a první dva prvky druhého řádku (nebo sloupce).
Pokud sourceArray a destinationArray překrývají se, tato metoda se chová, jako by původní hodnoty sourceArray byly zachovány v dočasném umístění před destinationArray přepsání.
[C++]
Tato metoda je ekvivalentní standardní funkci memmoveC/C++ , nikoli memcpy.
Matice můžou být matice typu odkaz nebo matice typu hodnoty. Podle potřeby se provádí downcasting typu.
Při kopírování z pole typu odkazu do pole typu hodnota je každý prvek unboxed a poté zkopírován. Při kopírování z pole typu hodnota do pole typu odkazu je každý prvek boxován a poté zkopírován.
Při kopírování z pole typu odkazu nebo typu hodnoty do Object pole se vytvoří pole, které Object bude obsahovat každou hodnotu nebo odkaz a pak se zkopíruje. Při kopírování z Object pole do pole typu odkazu nebo typu hodnoty a přiřazení není možné, InvalidCastException vyvolá se.
Jsou-li
sourceArrayobědestinationArraymatice typu odkaz nebo jsou obě matice typu Object, provede se mělká kopie. Mělká kopie je Array nová Array , která obsahuje odkazy na stejné prvky jako původní Array. Samotné prvky nebo cokoli, na co odkazují prvky, se nekopírují. Naproti tomu hloubková Array kopie prvků a všech prvků přímo nebo nepřímo odkazovaných prvky.
Vyvolá ArrayTypeMismatchException se, pokud pole jsou nekompatibilních typů. Kompatibilita typů je definována takto:
Typ je kompatibilní se samotným.
Typ hodnoty je kompatibilní s Object typem rozhraní implementovaným tímto typem hodnoty. Typ hodnoty je považován za připojený k rozhraní pouze v případě, že implementuje toto rozhraní přímo. Odpojené typy nejsou kompatibilní.
Dva vnitřní (předdefinované) typy hodnot jsou kompatibilní, pokud kopírování ze zdrojového typu do cílového typu je rozšiřující převod. Rozšiřující převod nikdy neztratí informace, zatímco zužující převod může ztratit informace. Například převod 32bitového celého čísla se signedménka na 64bitové celé číslo se signy je rozšiřující převod a převod 64bitového celého čísla se signedem na 32bitové celé číslo se zúžením. Další informace o převodech naleznete v tématu Convert.
Neintrinsický (uživatelem definovaný) typ hodnoty je kompatibilní pouze se samotným.
Výčty mají implicitní převod na Enum základní typ a na jejich základní typ.
Pokud každý prvek v sourceArray vyžaduje downcast (například ze základní třídy do odvozené třídy nebo z rozhraní objektu) a jeden nebo více prvků nelze přetypovat na odpovídající typ v destinationArray, InvalidCastException je vyvolán.
Pokud tato metoda vyvolá výjimku při kopírování, stav destinationArray je nedefinován.
Tato metoda je operace O(n), kde n je length.
Viz také
Platí pro
Copy(Array, Array, Int64)
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- Array.cs
- Zdroj:
- 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)
Parametry
- length
- Int64
64bitové celé číslo, které představuje počet prvků, které se mají zkopírovat. Celé číslo musí být mezi nulou a Int32.MaxValue (včetně).
Výjimky
sourceArray a destinationArray mají různé pořadí.
sourceArray a destinationArray jsou nekompatibilních typů.
Nejméně jeden prvek nelze sourceArray přetypovat na typ destinationArray.
length je menší než 0 nebo větší než Int32.MaxValue.
length je větší než počet prvků v sourceArray.
nebo
length je větší než počet prvků v destinationArray.
Poznámky
sourceArray Parametry destinationArray musí mít stejný počet dimenzí. Kromě toho destinationArray musí být již dimenze a musí mít dostatečný počet prvků pro přizpůsobení zkopírovaných dat.
Při kopírování mezi multidimenzionálními poli se pole chová jako dlouhé jednorozměrné pole, kde jsou řádky (nebo sloupce) koncepčně rozložené na konec. Pokud má například matice tři řádky (nebo sloupce) se čtyřmi prvky, zkopírování šesti prvků od začátku pole zkopíruje všechny čtyři prvky prvního řádku (nebo sloupce) a první dva prvky druhého řádku (nebo sloupce).
Pokud sourceArray a destinationArray překrývají se, tato metoda se chová, jako by původní hodnoty sourceArray byly zachovány v dočasném umístění před destinationArray přepsání.
[C++]
Tato metoda je ekvivalentní standardní funkci memmoveC/C++ , nikoli memcpy.
Matice můžou být matice typu odkaz nebo matice typu hodnoty. Podle potřeby se provádí downcasting typu.
Při kopírování z pole typu odkazu do pole typu hodnota je každý prvek unboxed a poté zkopírován. Při kopírování z pole typu hodnota do pole typu odkazu je každý prvek boxován a poté zkopírován.
Při kopírování z pole typu odkazu nebo typu hodnoty do Object pole se vytvoří pole, které Object bude obsahovat každou hodnotu nebo odkaz a pak se zkopíruje. Při kopírování z Object pole do pole typu odkazu nebo typu hodnoty a přiřazení není možné, InvalidCastException vyvolá se.
Jsou-li
sourceArrayobědestinationArraymatice typu odkaz nebo jsou obě matice typu Object, provede se mělká kopie. Mělká kopie je Array nová Array , která obsahuje odkazy na stejné prvky jako původní Array. Samotné prvky nebo cokoli, na co odkazují prvky, se nekopírují. Naproti tomu hloubková Array kopie prvků a všech prvků přímo nebo nepřímo odkazovaných prvky.
Vyvolá ArrayTypeMismatchException se, pokud pole jsou nekompatibilních typů. Kompatibilita typů je definována takto:
Typ je kompatibilní se samotným.
Typ hodnoty je kompatibilní s Object typem rozhraní implementovaným tímto typem hodnoty. Typ hodnoty je považován za připojený k rozhraní pouze v případě, že implementuje toto rozhraní přímo. Odpojené typy nejsou kompatibilní.
Dva vnitřní (předdefinované) typy hodnot jsou kompatibilní, pokud kopírování ze zdrojového typu do cílového typu je rozšiřující převod. Rozšiřující převod nikdy neztratí informace, zatímco zužující převod může ztratit informace. Například převod 32bitového celého čísla se signedménka na 64bitové celé číslo se signy je rozšiřující převod a převod 64bitového celého čísla se signedem na 32bitové celé číslo se zúžením. Další informace o převodech naleznete v tématu Convert.
Neintrinsický (uživatelem definovaný) typ hodnoty je kompatibilní pouze se samotným.
Výčty mají implicitní převod na Enum základní typ a na jejich základní typ.
Pokud každý prvek v sourceArray vyžaduje downcast (například ze základní třídy do odvozené třídy nebo z rozhraní objektu) a jeden nebo více prvků nelze přetypovat na odpovídající typ v destinationArray, InvalidCastException je vyvolán.
Pokud tato metoda vyvolá výjimku při kopírování, stav destinationArray je nedefinován.
Tato metoda je operace O(n), kde n je length.