Array.Copy メソッド

定義

一方の 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型から整数型の別Arrayの型Objectにコピーする方法を示しています。

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)

ソース:
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 の型にキャストできません。

sourceIndexsourceArrayの有効なインデックスの範囲外です。

- または -

destinationIndexdestinationArrayの有効なインデックスの範囲外です。

- または -

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

lengthsourceIndex から最後の sourceArray までの要素の数を超えています。

- または -

lengthdestinationIndex から最後の destinationArray までの要素の数を超えています。

注釈

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

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

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

[C++]

このメソッドは、 ではなくmemcpy、標準の C/C++ 関数memmoveと同じです。

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

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

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

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

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

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

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

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

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

  • 列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。

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

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

このメソッドは O(n) 操作です。nlength です。

こちらもご覧ください

適用対象

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

ソース:
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 の型にキャストできません。

sourceIndexsourceArray の最初の次元の下限を下回っています。

- または -

destinationIndexdestinationArray の最初の次元の下限を下回っています。

- または -

length が 0 未満です。

lengthsourceIndex から最後の sourceArray までの要素の数を超えています。

- または -

lengthdestinationIndex から最後の destinationArray までの要素の数を超えています。

注釈

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

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

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

[C++]

このメソッドは、 ではなくmemcpy、標準の C/C++ 関数memmoveと同じです。

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

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

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

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

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

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

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

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

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

  • 列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。

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

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

このメソッドは O(n) 操作です。nlength です。

こちらもご覧ください

適用対象

Copy(Array, Array, Int32)

ソース:
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 未満です。

lengthsourceArray にある要素の数を超えています。

- または -

lengthdestinationArray にある要素の数を超えています。

注釈

sourceArrayパラメーターと destinationArray パラメーターには、同じ数のディメンションが必要です。 さらに、 は既にディメンション化されている必要があり、 destinationArray コピーされたデータに対応するのに十分な数の要素が必要です。

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

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

[C++]

このメソッドは、 ではなくmemcpy、標準の C/C++ 関数memmoveと同じです。

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

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

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

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

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

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

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

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

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

  • 列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。

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

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

このメソッドは O(n) 操作です。nlength です。

こちらもご覧ください

適用対象

Copy(Array, Array, Int64)

ソース:
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 より大きい。

lengthsourceArray にある要素の数を超えています。

- または -

lengthdestinationArray にある要素の数を超えています。

注釈

sourceArrayパラメーターと destinationArray パラメーターには、同じ数のディメンションが必要です。 さらに、 は既にディメンション化されている必要があり、 destinationArray コピーされたデータに対応するのに十分な数の要素が必要です。

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

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

[C++]

このメソッドは、 ではなくmemcpy、標準の C/C++ 関数memmoveと同じです。

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

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

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

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

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

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

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

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

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

  • 列挙型は、基になる型への Enum 暗黙的な変換と、その基になる型への暗黙的な変換を持っています。

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

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

このメソッドは O(n) 操作です。nlength です。

こちらもご覧ください

適用対象