Array.Copy メソッド

定義

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

オーバーロード

Copy(Array, Array, Int32)

最初の要素を開始位置として Array から要素の範囲をコピーし、最初の要素を開始位置として他の Array にそれらの要素を貼り付けます。 長さは 32 ビット整数値として指定します。

Copy(Array, Array, Int64)

最初の要素を開始位置として Array から要素の範囲をコピーし、最初の要素を開始位置として他の Array にそれらの要素を貼り付けます。 長さは 64 ビット整数値として指定します。

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

指定したコピー元インデックスを開始位置として Array から要素の範囲をコピーし、指定したコピー先インデックスを開始位置として他の Array にそれらの要素を貼り付けます。 長さとインデックスは、32 ビット整数として指定します。

Copy(Array, Int64, Array, Int64, Int64)

指定したコピー元インデックスを開始位置として Array から要素の範囲をコピーし、指定したコピー先インデックスを開始位置として他の Array にそれらの要素を貼り付けます。 長さとインデックスは、64 ビット整数として指定します。

次のコード例では、 Array 型の1つから Object 整数型の別の型にコピーする方法を示し Array ます。

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
 */
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, Array, Int32)

最初の要素を開始位置として 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次元配列のように動作します。この配列では、行 (または列) が概念的にエンドツーエンドに配置されます。 たとえば、配列に4つの要素を持つ3つの行 (または列) がある場合、配列の先頭から6つの要素をコピーすると、最初の行 (または列) の4つの要素と2番目の行 (または列) の最初の2つの要素がコピーされます。

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

[C++]

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

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

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

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

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

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

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

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

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

  • 非組み込み型 (ユーザー定義) の値型は、それ自体と互換性があるだけです。

  • 列挙体は、 Enum その基になる型との間で暗黙的な変換を行います。

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

コピー中にこのメソッドが例外をスローした場合、の状態 destinationArray は undefined になります。

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

こちらもご覧ください

適用対象

Copy(Array, Array, Int64)

最初の要素を開始位置として 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 から MaxValue (この値を含む) の間である必要があります。

例外

sourceArraynullです。

または

destinationArraynullです。

sourceArraydestinationArray のランクが異なります。

sourceArraydestinationArray の型は互換性がありません。

sourceArray の少なくとも 1 つの要素が destinationArray の型にキャストできません。

length が 0 未満であるか、または MaxValue を超えています。

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

  • または -

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

注釈

sourceArrayパラメーターと destinationArray パラメーターの次元数は同じである必要があります。 また、は destinationArray 既に次元が設定されている必要があり、コピーしたデータを格納するために十分な数の要素が必要です。

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

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

[C++]

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

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

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

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

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

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

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

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

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

  • 非組み込み型 (ユーザー定義) の値型は、それ自体と互換性があるだけです。

  • 列挙体は、 Enum その基になる型との間で暗黙的な変換を行います。

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

コピー中にこのメソッドが例外をスローした場合、の状態 destinationArray は undefined になります。

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

こちらもご覧ください

適用対象

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

指定したコピー元インデックスを開始位置として 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次元配列のように動作します。 たとえば、配列に4つの要素を持つ3つの行 (または列) がある場合、配列の先頭から6つの要素をコピーすると、最初の行 (または列) の4つの要素と2番目の行 (または列) の最初の2つの要素がコピーされます。 3番目の行 (または列) の2番目の要素からコピーを開始するには、 sourceIndex 最初の行 (または列) と2番目の行 (または列) の長さに2を加算した上限を指定する必要があります。

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

[C++]

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

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

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

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

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

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

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

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

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

  • 非組み込み型 (ユーザー定義) の値型は、それ自体と互換性があるだけです。

  • 列挙体は、 Enum その基になる型との間で暗黙的な変換を行います。

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

コピー中にこのメソッドが例外をスローした場合、の状態 destinationArray は undefined になります。

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

こちらもご覧ください

適用対象

Copy(Array, Int64, Array, Int64, Int64)

指定したコピー元インデックスを開始位置として 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 から MaxValue (この値を含む) の間である必要があります。

例外

sourceArraynullです。

または

destinationArraynullです。

sourceArraydestinationArray のランクが異なります。

sourceArraydestinationArray の型は互換性がありません。

sourceArray の少なくとも 1 つの要素が destinationArray の型にキャストできません。

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

  • または -

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

  • または -

length が 0 未満であるか、または MaxValue を超えています。

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

  • または -

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

注釈

sourceArrayパラメーターと destinationArray パラメーターの次元数は同じである必要があります。 また、は、 destinationArray 既に次元が設定されている必要があります。また、コピーした destinationIndex データを格納するために、位置から十分な数の要素を取得する必要があります。

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

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

[C++]

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

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

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

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

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

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

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

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

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

  • 非組み込み型 (ユーザー定義) の値型は、それ自体と互換性があるだけです。

  • 列挙体は、 Enum その基になる型との間で暗黙的な変換を行います。

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

コピー中にこのメソッドが例外をスローした場合、の状態 destinationArray は undefined になります。

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

こちらもご覧ください

適用対象