ArrayList.CopyTo方法用于复制整个数组列表到兼容的一维数组, 从目标数组的开头开始。
语法如下:
public virtual void CopyTo (Array array);
这里, Array是一维Array, 它是从ArrayList复制的元素的目的地。数组必须具有从零开始的索引。
例外情况:
- ArgumentNullException:如果Array一片空白。
- ArgumentException:如果Array是多维的OR源ArrayList中的元素数大于目标ArrayList中的元素数Array可以包含。
- InvalidCastException:如果源ArrayList的类型不能自动转换为目标的类型Array.
下面的程序说明了上述方法的使用:
示例1:
//C# code to illustrate the
//ArrayList.CopyTo Method
using System;
using System.Collections;
class GFG {
//Driver code
public static void Main()
{
//Creating an ArrayList
ArrayList myList = new ArrayList();
//Adding elements to ArrayList
myList.Add( "A" );
myList.Add( "B" );
myList.Add( "C" );
myList.Add( "D" );
myList.Add( "E" );
myList.Add( "F" );
myList.Add( "G" );
myList.Add( "H" );
//Creates and initializes the
//one-dimensional target Array.
String[] arr = new String[9];
arr[0] = "C" ;
arr[1] = "C++" ;
arr[2] = "Java" ;
arr[3] = "Python" ;
arr[4] = "C#" ;
arr[5] = "HTML" ;
arr[6] = "CSS" ;
arr[7] = "PHP" ;
arr[8] = "DBMS" ;
Console.WriteLine( "Before CopyTo Method: " );
Console.WriteLine( "\nArrayList Contains: " );
//printing ArrayList elements
foreach (Object obj in myList)
Console.WriteLine( "{0}" , obj);
Console.WriteLine( "\nString Array Contains: " );
//printing String elements
foreach (Object obj1 in arr)
Console.WriteLine( "{0}" , obj1);
Console.WriteLine( "After CopyTo Method: " );
//using CopyTo Method to copy
//the entire source ArrayList
//to the target Array starting
//at index 0
myList.CopyTo(arr);
Console.WriteLine( "\nArrayList Contains: " );
//printing ArrayList elements
foreach (Object obj in myList)
Console.WriteLine( "{0}" , obj);
Console.WriteLine( "\nString Array Contains: " );
//printing String elements
foreach (Object obj1 in arr)
Console.WriteLine( "{0}" , obj1);
}
}
输出如下:
Before CopyTo Method:
ArrayList Contains:
A
B
C
D
E
F
G
H
String Array Contains:
C
C++
Java
Python
C#
HTML
CSS
PHP
DBMS
After CopyTo Method:
ArrayList Contains:
A
B
C
D
E
F
G
H
String Array Contains:
A
B
C
D
E
F
G
H
DBMS
示例2:
//C# code to illustrate the
//ArrayList.CopyTo Method
using System;
using System.Collections;
class GFG {
//Driver code
public static void Main()
{
//Creating an ArrayList
ArrayList myList = new ArrayList();
//Adding elements to ArrayList
myList.Add( "HTML" );
myList.Add( "CSS" );
myList.Add( "PHP" );
myList.Add( "DBMS" );
//Creates and initializes the
//one-dimensional target Array.
//Here array size is only 2 i.e
//it can hold only 3 elements.
String[] arr = new String[2];
Console.WriteLine( "Before CopyTo Method: " );
Console.WriteLine( "\nArrayList Contains: " );
//printing ArrayList elements
foreach (Object obj in myList)
Console.WriteLine( "{0}" , obj);
Console.WriteLine( "\nString Array Contains: " );
//printing String elements
foreach (Object obj1 in arr)
Console.WriteLine( "{0}" , obj1);
Console.WriteLine( "After CopyTo Method: " );
//using CopyTo Method but It will give
//Runtime Error as number of elements
//in the source ArrayList is greater
//than the number of elements that
//the destination array can contain
myList.CopyTo(arr);
Console.WriteLine( "\nArrayList Contains: " );
//printing ArrayList elements
foreach (Object obj in myList)
Console.WriteLine( "{0}" , obj);
Console.WriteLine( "\nString Array Contains: " );
//printing String elements
foreach (Object obj1 in arr)
Console.WriteLine( "{0}" , obj1);
}
}
运行时错误:
未处理的异常:System.ArgumentException:目标数组不够长。检查destIndex和length, 以及数组的下限参数名称:destinationArray
参考:
- https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.arraylist.copyto?view=netframework-4.7.2#System_Collections_ArrayList_CopyTo_System_Array_