Array.Copy 方法

定義

將多種元素 Array 複製到另一個 Array 元素,並依需求進行字模鑄造與裝箱。

多載

名稱 Description
Copy(Array, Int64, Array, Int64, Int64)

從指定來源索引起點複製一系列元素 Array ,並貼上到指定目的索引起點的另一個 Array 元素。 長度和索引會指定為64位整數。

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

從指定來源索引起點複製一系列元素 Array ,並貼上到指定目的索引起點的另一個 Array 元素。 長度和索引會指定為32位整數。

Copy(Array, Array, Int32)

從 從 Array 第一個元素開始複製一系列元素,並貼到從第一個元素開始的另一個 Array 元素中。 長度會指定為32位整數。

Copy(Array, Array, Int64)

從 從 Array 第一個元素開始複製一系列元素,並貼到從第一個元素開始的另一個 Array 元素中。 長度會指定為64位整數。

範例

以下程式碼範例說明如何從一個 Array 型別 Object 的整數型複製到另一個 Array 型別。

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)

來源:
Array.cs
來源:
Array.cs
來源:
Array.cs
來源:
Array.cs
來源:
Array.cs

從指定來源索引起點複製一系列元素 Array ,並貼上到指定目的索引起點的另一個 Array 元素。 長度和索引會指定為64位整數。

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)

參數

sourceArray
Array

那個 Array 包含要複製的資料。

sourceIndex
Int64

一個 64 位元整數,代表複製開始的索引 sourceArray

destinationArray
Array

Array 個接收資料的人。

destinationIndex
Int64

一個 64 位元整數,代表儲存開始的索引 destinationArray

length
Int64

一個 64 位元整數,代表要複製的元素數量。 整數必須介於零與 Int32.MaxValue 之間,包含。

例外狀況

sourceArraynull

-或-

destinationArraynull

sourceArray 而且 destinationArray 有不同的軍階。

sourceArray 以及 destinationArray 不相容的類型。

至少有一個元素 sourceArray 無法被鑄造為 的類型 destinationArray

sourceIndex 超出有效索引 sourceArray範圍。

-或-

destinationIndex 超出有效索引 destinationArray範圍。

-或-

length 小於 0 或大於 Int32.MaxValue

length 大於從 sourceIndex 到 末 sourceArray端的元素數。

-或-

length 大於從 destinationIndex 到 末 destinationArray端的元素數。

備註

sourceArraydestinationArray參數的維度數必須相同。 此外,必須 destinationArray 已經被量度過,且從位置開始 destinationIndex 的元素數量必須足夠容納複製的資料。

在多維陣列間複製時,陣列表現為長的一維陣列,列(或欄位)概念上是端對端排列。 例如,若陣列有三列(或列),每列有四個元素,從陣列起始複製六個元素,將複製第一列(或列)的全部四個元素,以及第二列(或列)的前兩個元素。 要開始從第三列(或列)的第二個元素複製, sourceIndex 必須是第一列(或列)的上界加上第二列(或列)的長度再加二。

sourceArraydestinationArray 重疊,此方法表現為先前 的 sourceArray 原始值被暫時保留 destinationArray 於被覆寫。

[C++]

此方法等價於標準的 C/C++ 函式 memmove,而非 memcpy

陣列可以是參考型陣列或值型陣列。 視需要執行型別下放。

  • 當從參考型陣列複製到值型陣列時,每個元素先開箱再複製。 當從值型陣列複製到參考型陣列時,每個元素先被框定後再複製。

  • 當從參考型別或值型態陣列複製到陣 Object 列時, Object 會建立一個來保存每個值或參考,然後再複製。 當從 Object 陣列複製到參考型別或值型型陣列且無法執行指派時,會拋出 a InvalidCastException

  • sourceArraydestinationArray 都是參考型態陣列,或 都是型別 Object的陣列,則會執行淺層複製。 淺Array層副本 是包含與原始Array相同元素的 新副本Array。 元素本身或元素所參考的任何東西都不會被複製。 相較之下,深層複製品 Array 會複製元素以及元素直接或間接引用的所有事物。

若陣列類型不相容,則會拋出 A ArrayTypeMismatchException 。 型別相容性的定義如下:

  • 一個型別與自身相容。

  • 一個值型別與 Object 該值型別所實作的介面型別相容。 只有當一個值類型直接實作該介面時,才被視為連接該介面。 斷開的類型不相容。

  • 若從來源類型複製到目的類型是擴大轉換,兩種內在(預先定義)值類型是相容的。 擴大轉換永遠不會遺失資訊,而縮小轉換則可能遺失資訊。 例如,將一個32位元有號整數轉換成64位元有號整數是寬度轉換,而將64位元有號整數轉換為32位元有號整數則是窄位轉換。 欲了解更多關於轉換的資訊,請參見 Convert

  • 非內在(使用者定義)值類型僅與自身相容。

  • 列舉有隱含的轉換與 Enum 其底層型別的轉換。

如果 中的sourceArray每個元素都需要下拋(例如從基底類別到導出類別,或從介面到物件),且無法將一個或多個元素鑄造成對應的型別 。destinationArrayInvalidCastException

如果此方法在複製時拋出例外,則 的 destinationArray 狀態未定義。

此方法是一個 O(n) 運算,其中 nlength

另請參閱

適用於

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

來源:
Array.cs
來源:
Array.cs
來源:
Array.CoreCLR.cs
來源:
Array.cs
來源:
Array.cs

從指定來源索引起點複製一系列元素 Array ,並貼上到指定目的索引起點的另一個 Array 元素。 長度和索引會指定為32位整數。

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)

參數

sourceArray
Array

那個 Array 包含要複製的資料。

sourceIndex
Int32

一個 32 位元整數,代表複製開始的索引 sourceArray

destinationArray
Array

Array 個接收資料的人。

destinationIndex
Int32

一個 32 位元整數,代表儲存開始的索引 destinationArray

length
Int32

一個 32 位元整數,代表要複製的元素數量。

例外狀況

sourceArraynull

-或-

destinationArraynull

sourceArray 而且 destinationArray 有不同的軍階。

sourceArray 以及 destinationArray 不相容的類型。

至少有一個元素 sourceArray 無法被鑄造為 的類型 destinationArray

sourceIndex 小於第一 sourceArray維的下界。

-或-

destinationIndex 小於第一 destinationArray維的下界。

-或-

length 小於零。

length 大於從 sourceIndex 到 末 sourceArray端的元素數。

-或-

length 大於從 destinationIndex 到 末 destinationArray端的元素數。

備註

sourceArraydestinationArray參數的維度數必須相同。 此外,必須 destinationArray 已經被量度過,且從位置開始 destinationIndex 的元素數量必須足夠容納複製的資料。

在多維陣列間複製時,陣列表現為長的一維陣列,列(或欄位)概念上是端對端排列。 例如,若陣列有三列(或列),每列有四個元素,從陣列起始複製六個元素,將複製第一列(或列)的全部四個元素,以及第二列(或列)的前兩個元素。 要開始從第三列(或列)的第二個元素複製, sourceIndex 必須是第一列(或列)的上界加上第二列(或列)的長度再加二。

sourceArraydestinationArray 重疊,此方法表現為先前 的 sourceArray 原始值被暫時保留 destinationArray 於被覆寫。

[C++]

此方法等價於標準的 C/C++ 函式 memmove,而非 memcpy

陣列可以是參考型陣列或值型陣列。 視需要執行型別下放。

  • 當從參考型陣列複製到值型陣列時,每個元素先開箱再複製。 當從值型陣列複製到參考型陣列時,每個元素先被框定後再複製。

  • 當從參考型別或值型態陣列複製到陣 Object 列時, Object 會建立一個來保存每個值或參考,然後再複製。 當從 Object 陣列複製到參考型別或值型型陣列且無法執行指派時,會拋出 a InvalidCastException

  • sourceArraydestinationArray 都是參考型態陣列,或 都是型別 Object的陣列,則會執行淺層複製。 淺Array層副本 是包含與原始Array相同元素的 新副本Array。 元素本身或元素所參考的任何東西都不會被複製。 相較之下,深層複製品 Array 會複製元素以及元素直接或間接引用的所有事物。

若陣列類型不相容,則會拋出 A ArrayTypeMismatchException 。 型別相容性的定義如下:

  • 一個型別與自身相容。

  • 一個值型別與 Object 該值型別所實作的介面型別相容。 只有當一個值類型直接實作該介面時,才被視為連接該介面。 斷開的類型不相容。

  • 若從來源類型複製到目的類型是擴大轉換,兩種內在(預先定義)值類型是相容的。 擴大轉換永遠不會遺失資訊,而縮小轉換則可能遺失資訊。 例如,將一個32位元有號整數轉換成64位元有號整數是寬度轉換,而將64位元有號整數轉換為32位元有號整數則是窄位轉換。 欲了解更多關於轉換的資訊,請參見 Convert

  • 非內在(使用者定義)值類型僅與自身相容。

  • 列舉有隱含的轉換與 Enum 其底層型別的轉換。

如果 中的sourceArray每個元素都需要下拋(例如從基底類別到導出類別,或從介面到物件),且無法將一個或多個元素鑄造成對應的型別 。destinationArrayInvalidCastException

如果此方法在複製時拋出例外,則 的 destinationArray 狀態未定義。

此方法是一個 O(n) 運算,其中 nlength

另請參閱

適用於

Copy(Array, Array, Int32)

來源:
Array.cs
來源:
Array.cs
來源:
Array.CoreCLR.cs
來源:
Array.cs
來源:
Array.cs

從 從 Array 第一個元素開始複製一系列元素,並貼到從第一個元素開始的另一個 Array 元素中。 長度會指定為32位整數。

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)

參數

sourceArray
Array

那個 Array 包含要複製的資料。

destinationArray
Array

Array 個接收資料的人。

length
Int32

一個 32 位元整數,代表要複製的元素數量。

例外狀況

sourceArraynull

-或-

destinationArraynull

sourceArray 而且 destinationArray 有不同的軍階。

sourceArray 以及 destinationArray 不相容的類型。

至少有一個元素 sourceArray 無法被鑄造為 的類型 destinationArray

length 小於零。

length 大於 中的 sourceArray元素數。

-或-

length 大於 中的 destinationArray元素數。

備註

sourceArraydestinationArray參數的維度數必須相同。 此外, destinationArray 必須已經有尺寸設定,且元素數量必須足夠容納複製的資料。

在多維陣列間複製時,陣列表現得像一個長的一維陣列,列(或欄位)在概念上是端對端排列的。 例如,若陣列有三列(或列),每列有四個元素,從陣列起始複製六個元素,將複製第一列(或列)的全部四個元素,以及第二列(或列)的前兩個元素。

sourceArraydestinationArray 重疊,此方法表現為先前 的 sourceArray 原始值被暫時保留 destinationArray 於被覆寫。

[C++]

此方法等價於標準的 C/C++ 函式 memmove,而非 memcpy

陣列可以是參考型陣列或值型陣列。 視需要執行型別下放。

  • 當從參考型陣列複製到值型陣列時,每個元素先開箱再複製。 當從值型陣列複製到參考型陣列時,每個元素先被框定後再複製。

  • 當從參考型別或值型態陣列複製到陣 Object 列時, Object 會建立一個來保存每個值或參考,然後再複製。 當從 Object 陣列複製到參考型別或值型型陣列且無法執行指派時,會拋出 a InvalidCastException

  • sourceArraydestinationArray 都是參考型態陣列,或 都是型別 Object的陣列,則會執行淺層複製。 淺Array層副本 是包含與原始Array相同元素的 新副本Array。 元素本身或元素所參考的任何東西都不會被複製。 相較之下,深層複製品 Array 會複製元素以及元素直接或間接引用的所有事物。

若陣列類型不相容,則會拋出 A ArrayTypeMismatchException 。 型別相容性的定義如下:

  • 一個型別與自身相容。

  • 一個值型別與 Object 該值型別所實作的介面型別相容。 只有當一個值類型直接實作該介面時,才被視為連接該介面。 斷開的類型不相容。

  • 若從來源類型複製到目的類型是擴大轉換,兩種內在(預先定義)值類型是相容的。 擴大轉換永遠不會遺失資訊,而縮小轉換則可能遺失資訊。 例如,將一個32位元有號整數轉換成64位元有號整數是寬度轉換,而將64位元有號整數轉換為32位元有號整數則是窄位轉換。 欲了解更多關於轉換的資訊,請參見 Convert

  • 非內在(使用者定義)值類型僅與自身相容。

  • 列舉有隱含的轉換與 Enum 其底層型別的轉換。

如果 中的sourceArray每個元素都需要下拋(例如從基底類別到導出類別,或從介面到物件),且無法將一個或多個元素鑄造成對應的型別 。destinationArrayInvalidCastException

如果此方法在複製時拋出例外,則 的 destinationArray 狀態未定義。

此方法是一個 O(n) 運算,其中 nlength

另請參閱

適用於

Copy(Array, Array, Int64)

來源:
Array.cs
來源:
Array.cs
來源:
Array.cs
來源:
Array.cs
來源:
Array.cs

從 從 Array 第一個元素開始複製一系列元素,並貼到從第一個元素開始的另一個 Array 元素中。 長度會指定為64位整數。

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)

參數

sourceArray
Array

那個 Array 包含要複製的資料。

destinationArray
Array

Array 個接收資料的人。

length
Int64

一個 64 位元整數,代表要複製的元素數量。 整數必須介於零與 Int32.MaxValue 之間,包含。

例外狀況

sourceArraynull

-或-

destinationArraynull

sourceArray 而且 destinationArray 有不同的軍階。

sourceArray 以及 destinationArray 不相容的類型。

至少有一個元素 sourceArray 無法被鑄造為 的類型 destinationArray

length 小於 0 或大於 Int32.MaxValue

length 大於 中的 sourceArray元素數。

-或-

length 大於 中的 destinationArray元素數。

備註

sourceArraydestinationArray參數的維度數必須相同。 此外, destinationArray 必須已經有尺寸設定,且元素數量必須足夠容納複製的資料。

在多維陣列間複製時,陣列表現得像一個長的一維陣列,列(或欄位)在概念上是端對端排列的。 例如,若陣列有三列(或列),每列有四個元素,從陣列起始複製六個元素,將複製第一列(或列)的全部四個元素,以及第二列(或列)的前兩個元素。

sourceArraydestinationArray 重疊,此方法表現為先前 的 sourceArray 原始值被暫時保留 destinationArray 於被覆寫。

[C++]

此方法等價於標準的 C/C++ 函式 memmove,而非 memcpy

陣列可以是參考型陣列或值型陣列。 視需要執行型別下放。

  • 當從參考型陣列複製到值型陣列時,每個元素先開箱再複製。 當從值型陣列複製到參考型陣列時,每個元素先被框定後再複製。

  • 當從參考型別或值型態陣列複製到陣 Object 列時, Object 會建立一個來保存每個值或參考,然後再複製。 當從 Object 陣列複製到參考型別或值型型陣列且無法執行指派時,會拋出 a InvalidCastException

  • sourceArraydestinationArray 都是參考型態陣列,或 都是型別 Object的陣列,則會執行淺層複製。 淺Array層副本 是包含與原始Array相同元素的 新副本Array。 元素本身或元素所參考的任何東西都不會被複製。 相較之下,深層複製品 Array 會複製元素以及元素直接或間接引用的所有事物。

若陣列類型不相容,則會拋出 A ArrayTypeMismatchException 。 型別相容性的定義如下:

  • 一個型別與自身相容。

  • 一個值型別與 Object 該值型別所實作的介面型別相容。 只有當一個值類型直接實作該介面時,才被視為連接該介面。 斷開的類型不相容。

  • 若從來源類型複製到目的類型是擴大轉換,兩種內在(預先定義)值類型是相容的。 擴大轉換永遠不會遺失資訊,而縮小轉換則可能遺失資訊。 例如,將一個32位元有號整數轉換成64位元有號整數是寬度轉換,而將64位元有號整數轉換為32位元有號整數則是窄位轉換。 欲了解更多關於轉換的資訊,請參見 Convert

  • 非內在(使用者定義)值類型僅與自身相容。

  • 列舉有隱含的轉換與 Enum 其底層型別的轉換。

如果 中的sourceArray每個元素都需要下拋(例如從基底類別到導出類別,或從介面到物件),且無法將一個或多個元素鑄造成對應的型別 。destinationArrayInvalidCastException

如果此方法在複製時拋出例外,則 的 destinationArray 狀態未定義。

此方法是一個 O(n) 運算,其中 nlength

另請參閱

適用於