Array.Copy メソッド

定義

1 つの Array 内の要素の範囲を別の Array にコピーし、必要に応じて型キャストとボックス化を実行します。

オーバーロード

名前 説明
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型の 1 つの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

コピーの開始位置 sourceArray インデックスを表す 64 ビット整数。

destinationArray
Array

データを受信する Array

destinationIndex
Int64

格納を開始する destinationArray 内のインデックスを表す 64 ビット整数。

length
Int64

コピーする要素の数を表す 64 ビット整数。 整数は、0 から Int32.MaxValue までの範囲で指定する必要があります。

例外

sourceArraynullです。

-又は-

destinationArraynullです。

sourceArraydestinationArray は異なるランクを持っています。

sourceArraydestinationArray は互換性のない型です。

sourceArray内の少なくとも 1 つの要素をdestinationArrayの型にキャストすることはできません。

sourceIndex が、 sourceArrayの有効なインデックスの範囲外です。

-又は-

destinationIndex が、 destinationArrayの有効なインデックスの範囲外です。

-又は-

length が 0 より小さいか 、Int32.MaxValue より大きい値です。

length は、 sourceIndex から sourceArray の末尾までの要素の数を超えています。

-又は-

length は、 destinationIndex から destinationArray の末尾までの要素の数を超えています。

注釈

sourceArrayパラメーターと destinationArray パラメーターは、同じ数のディメンションを持つ必要があります。 さらに、 destinationArray は既にディメンションが設定されている必要があり、コピーされたデータを格納するのに十分な数の要素が destinationIndex 位置から始まっている必要があります。

多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作し、行 (または列) は概念的にエンドツーエンドで配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれ 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素と、2 番目の行 (または列) の最初の 2 つの要素がすべてコピーされます。 3 番目の行 (または列) の 2 番目の要素からのコピーを開始するには、 sourceIndex は、最初の行 (または列) の上限に 2 行目 (または列) の長さと 2 を加えたものにする必要があります。

sourceArraydestinationArrayが重複している場合、このメソッドは、sourceArrayの元の値が一時的な場所に保持された場合と同様に動作destinationArray上書きされます。

[C++]

このメソッドは、memmoveではなく、標準の C/C++ 関数memcpyに相当します。

配列には、参照型配列または値型配列を指定できます。 必要に応じて、型のダウンキャストが実行されます。

  • 参照型配列から値型配列にコピーする場合、各要素はボックス化解除され、コピーされます。 値型配列から参照型配列にコピーする場合、各要素はボックス化されてコピーされます。

  • 参照型または値型の配列から Object 配列にコピーすると、各値または参照を保持する Object が作成され、コピーされます。 Object配列から参照型または値型の配列にコピーし、代入できない場合は、InvalidCastExceptionがスローされます。

  • sourceArraydestinationArrayの両方が参照型の配列であるか、または両方ともObject型の配列である場合は、浅いコピーが実行されます。 Arrayの浅いコピーは、元のArrayと同じ要素への参照を含む新しいArrayです。 要素自体または要素によって参照される要素はコピーされません。 これに対し、 Array のディープ コピーでは、要素とその要素によって直接または間接的に参照されるすべてのものがコピーされます。

配列が互換性のない型の場合、 ArrayTypeMismatchException がスローされます。 型の互換性は次のように定義されます。

  • 型はそれ自体と互換性があります。

  • 値型は、 Object と互換性があり、その値型によって実装されるインターフェイス型と互換性があります。 値型は、そのインターフェイスを直接実装する場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。

  • 変換元の型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「 Convert」を参照してください。

  • 非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。

  • 列挙型には、 Enum とその基になる型への暗黙的な変換があります。

sourceArray内のすべての要素にダウンキャストが必要で (基底クラスから派生クラス、インターフェイスからオブジェクトへのなど)、destinationArrayの対応する型に 1 つ以上の要素をキャストできない場合、InvalidCastExceptionがスローされます。

このメソッドがコピー中に例外をスローした場合、 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

コピーの開始位置 sourceArray インデックスを表す 32 ビット整数。

destinationArray
Array

データを受信する Array

destinationIndex
Int32

格納を開始する destinationArray 内のインデックスを表す 32 ビット整数。

length
Int32

コピーする要素の数を表す 32 ビット整数。

例外

sourceArraynullです。

-又は-

destinationArraynullです。

sourceArraydestinationArray は異なるランクを持っています。

sourceArraydestinationArray は互換性のない型です。

sourceArray内の少なくとも 1 つの要素をdestinationArrayの型にキャストすることはできません。

sourceIndex は、 sourceArrayの最初の次元の下限より小さい値です。

-又は-

destinationIndex は、 destinationArrayの最初の次元の下限より小さい値です。

-又は-

length が 0 未満です。

length は、 sourceIndex から sourceArray の末尾までの要素の数を超えています。

-又は-

length は、 destinationIndex から destinationArray の末尾までの要素の数を超えています。

注釈

sourceArrayパラメーターと destinationArray パラメーターは、同じ数のディメンションを持つ必要があります。 さらに、 destinationArray は既にディメンションが設定されている必要があり、コピーされたデータを格納するのに十分な数の要素が destinationIndex 位置から始まっている必要があります。

多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作し、行 (または列) は概念的にエンドツーエンドで配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれ 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素と、2 番目の行 (または列) の最初の 2 つの要素がすべてコピーされます。 3 番目の行 (または列) の 2 番目の要素からのコピーを開始するには、 sourceIndex は、最初の行 (または列) の上限に 2 行目 (または列) の長さと 2 を加えたものにする必要があります。

sourceArraydestinationArrayが重複している場合、このメソッドは、sourceArrayの元の値が一時的な場所に保持された場合と同様に動作destinationArray上書きされます。

[C++]

このメソッドは、memmoveではなく、標準の C/C++ 関数memcpyに相当します。

配列には、参照型配列または値型配列を指定できます。 必要に応じて、型のダウンキャストが実行されます。

  • 参照型配列から値型配列にコピーする場合、各要素はボックス化解除され、コピーされます。 値型配列から参照型配列にコピーする場合、各要素はボックス化されてコピーされます。

  • 参照型または値型の配列から Object 配列にコピーすると、各値または参照を保持する Object が作成され、コピーされます。 Object配列から参照型または値型の配列にコピーし、代入できない場合は、InvalidCastExceptionがスローされます。

  • sourceArraydestinationArrayの両方が参照型の配列であるか、または両方ともObject型の配列である場合は、浅いコピーが実行されます。 Arrayの浅いコピーは、元のArrayと同じ要素への参照を含む新しいArrayです。 要素自体または要素によって参照される要素はコピーされません。 これに対し、 Array のディープ コピーでは、要素とその要素によって直接または間接的に参照されるすべてのものがコピーされます。

配列が互換性のない型の場合、 ArrayTypeMismatchException がスローされます。 型の互換性は次のように定義されます。

  • 型はそれ自体と互換性があります。

  • 値型は、 Object と互換性があり、その値型によって実装されるインターフェイス型と互換性があります。 値型は、そのインターフェイスを直接実装する場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。

  • 変換元の型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「 Convert」を参照してください。

  • 非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。

  • 列挙型には、 Enum とその基になる型への暗黙的な変換があります。

sourceArray内のすべての要素にダウンキャストが必要で (基底クラスから派生クラス、インターフェイスからオブジェクトへのなど)、destinationArrayの対応する型に 1 つ以上の要素をキャストできない場合、InvalidCastExceptionがスローされます。

このメソッドがコピー中に例外をスローした場合、 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です。

sourceArraydestinationArray は異なるランクを持っています。

sourceArraydestinationArray は互換性のない型です。

sourceArray内の少なくとも 1 つの要素をdestinationArrayの型にキャストすることはできません。

length が 0 未満です。

length は、 sourceArray内の要素の数より大きい値です。

-又は-

length は、 destinationArray内の要素の数より大きい値です。

注釈

sourceArrayパラメーターと destinationArray パラメーターは、同じ数のディメンションを持つ必要があります。 さらに、 destinationArray は既にディメンションが設定されている必要があり、コピーされたデータを格納するのに十分な数の要素が必要です。

多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作し、行 (または列) は概念的に端まで配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれ 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素と、2 番目の行 (または列) の最初の 2 つの要素がすべてコピーされます。

sourceArraydestinationArrayが重複している場合、このメソッドは、sourceArrayの元の値が一時的な場所に保持された場合と同様に動作destinationArray上書きされます。

[C++]

このメソッドは、memmoveではなく、標準の C/C++ 関数memcpyに相当します。

配列には、参照型配列または値型配列を指定できます。 必要に応じて、型のダウンキャストが実行されます。

  • 参照型配列から値型配列にコピーする場合、各要素はボックス化解除され、コピーされます。 値型配列から参照型配列にコピーする場合、各要素はボックス化されてコピーされます。

  • 参照型または値型の配列から Object 配列にコピーすると、各値または参照を保持する Object が作成され、コピーされます。 Object配列から参照型または値型の配列にコピーし、代入できない場合は、InvalidCastExceptionがスローされます。

  • sourceArraydestinationArrayの両方が参照型の配列であるか、または両方ともObject型の配列である場合は、浅いコピーが実行されます。 Arrayの浅いコピーは、元のArrayと同じ要素への参照を含む新しいArrayです。 要素自体または要素によって参照される要素はコピーされません。 これに対し、 Array のディープ コピーでは、要素とその要素によって直接または間接的に参照されるすべてのものがコピーされます。

配列が互換性のない型の場合、 ArrayTypeMismatchException がスローされます。 型の互換性は次のように定義されます。

  • 型はそれ自体と互換性があります。

  • 値型は、 Object と互換性があり、その値型によって実装されるインターフェイス型と互換性があります。 値型は、そのインターフェイスを直接実装する場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。

  • 変換元の型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「 Convert」を参照してください。

  • 非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。

  • 列挙型には、 Enum とその基になる型への暗黙的な変換があります。

sourceArray内のすべての要素にダウンキャストが必要で (基底クラスから派生クラス、インターフェイスからオブジェクトへのなど)、destinationArrayの対応する型に 1 つ以上の要素をキャストできない場合、InvalidCastExceptionがスローされます。

このメソッドがコピー中に例外をスローした場合、 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 ビット整数。 整数は、0 から Int32.MaxValue までの範囲で指定する必要があります。

例外

sourceArraynullです。

-又は-

destinationArraynullです。

sourceArraydestinationArray は異なるランクを持っています。

sourceArraydestinationArray は互換性のない型です。

sourceArray内の少なくとも 1 つの要素をdestinationArrayの型にキャストすることはできません。

length が 0 より小さいか 、Int32.MaxValue より大きい値です。

length は、 sourceArray内の要素の数より大きい値です。

-又は-

length は、 destinationArray内の要素の数より大きい値です。

注釈

sourceArrayパラメーターと destinationArray パラメーターは、同じ数のディメンションを持つ必要があります。 さらに、 destinationArray は既にディメンションが設定されている必要があり、コピーされたデータを格納するのに十分な数の要素が必要です。

多次元配列間でコピーする場合、配列は長い 1 次元配列のように動作し、行 (または列) は概念的に端まで配置されます。 たとえば、配列に 3 つの行 (または列) があり、それぞれ 4 つの要素がある場合、配列の先頭から 6 つの要素をコピーすると、最初の行 (または列) の 4 つの要素と、2 番目の行 (または列) の最初の 2 つの要素がすべてコピーされます。

sourceArraydestinationArrayが重複している場合、このメソッドは、sourceArrayの元の値が一時的な場所に保持された場合と同様に動作destinationArray上書きされます。

[C++]

このメソッドは、memmoveではなく、標準の C/C++ 関数memcpyに相当します。

配列には、参照型配列または値型配列を指定できます。 必要に応じて、型のダウンキャストが実行されます。

  • 参照型配列から値型配列にコピーする場合、各要素はボックス化解除され、コピーされます。 値型配列から参照型配列にコピーする場合、各要素はボックス化されてコピーされます。

  • 参照型または値型の配列から Object 配列にコピーすると、各値または参照を保持する Object が作成され、コピーされます。 Object配列から参照型または値型の配列にコピーし、代入できない場合は、InvalidCastExceptionがスローされます。

  • sourceArraydestinationArrayの両方が参照型の配列であるか、または両方ともObject型の配列である場合は、浅いコピーが実行されます。 Arrayの浅いコピーは、元のArrayと同じ要素への参照を含む新しいArrayです。 要素自体または要素によって参照される要素はコピーされません。 これに対し、 Array のディープ コピーでは、要素とその要素によって直接または間接的に参照されるすべてのものがコピーされます。

配列が互換性のない型の場合、 ArrayTypeMismatchException がスローされます。 型の互換性は次のように定義されます。

  • 型はそれ自体と互換性があります。

  • 値型は、 Object と互換性があり、その値型によって実装されるインターフェイス型と互換性があります。 値型は、そのインターフェイスを直接実装する場合にのみ、インターフェイスに接続されていると見なされます。 切断された型には互換性がありません。

  • 変換元の型からコピー先の型へのコピーが拡大変換である場合、2 つの組み込み (定義済み) 値型に互換性があります。 拡大変換では情報が失われることはありませんが、縮小変換では情報が失われる可能性があります。 たとえば、32 ビット符号付き整数を 64 ビット符号付き整数に変換することは拡大変換であり、64 ビット符号付き整数を 32 ビット符号付き整数に変換することは縮小変換です。 変換の詳細については、「 Convert」を参照してください。

  • 非intrinsic (ユーザー定義) 値型は、それ自体とのみ互換性があります。

  • 列挙型には、 Enum とその基になる型への暗黙的な変換があります。

sourceArray内のすべての要素にダウンキャストが必要で (基底クラスから派生クラス、インターフェイスからオブジェクトへのなど)、destinationArrayの対応する型に 1 つ以上の要素をキャストできない場合、InvalidCastExceptionがスローされます。

このメソッドがコピー中に例外をスローした場合、 destinationArray の状態は未定義です。

このメソッドは O(n) 操作であり、 nlength

こちらもご覧ください

適用対象