英語で読む

次の方法で共有


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にコピーする方法を示しています。

C#
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
*/

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

ソース:
Array.cs
ソース:
Array.cs
ソース:
Array.cs

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

C#
public static void Copy (Array sourceArray, long sourceIndex, Array destinationArray, long destinationIndex, long length);

パラメーター

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 です。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

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

ソース:
Array.CoreCLR.cs
ソース:
Array.cs
ソース:
Array.cs

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

C#
public static void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);

パラメーター

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 です。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Array, Array, Int32)

ソース:
Array.CoreCLR.cs
ソース:
Array.cs
ソース:
Array.cs

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

C#
public static void Copy (Array sourceArray, Array destinationArray, int length);

パラメーター

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 です。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Copy(Array, Array, Int64)

ソース:
Array.cs
ソース:
Array.cs
ソース:
Array.cs

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

C#
public static void Copy (Array sourceArray, Array destinationArray, long length);

パラメーター

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 です。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1