此方法用于从指定的数组索引开始,将Queue元素复制到现有的一维Array。将元素以枚举器遍历队列的相同顺序复制到Array,此方法是O(n)操作,其中n是Count。此方法位于System.Collections
命名空间下。
句法:
public virtual void CopyTo (Array array, int index);
参数:
array: It is the one-dimensional Array that is the destination of the elements copied from Queue. The Array must have zero-based indexing.
index: It is the zero-based index in array at which copying begins.
例外情况:
- ArgumentNullException:如果数组为null。
- ArgumentOutOfRangeException:如果索引小于零。
- ArgumentException:如果数组是多维的,
Or
源Queue中的元素数大于目标数组可以包含的元素数。 - InvalidCastException:如果无法将源队列的类型强制转换为目标数组的类型。
下面的程序说明了上面讨论的方法的使用:
范例1:
// C# code to illustrate the
// Queue.CopyTo(Array, Int32)
// Method
using System;
using System.Collections;
class GFG {
// Driver code
public static void Main()
{
// Creating an Queue
Queue myq = new Queue();
// Adding elements to Queue
myq.Enqueue("A");
myq.Enqueue("B");
myq.Enqueue("C");
myq.Enqueue("D");
// Creates and initializes the
// one-dimensional target Array.
String[] arr = new String[6];
// adding elements to Array
arr[0] = "HTML";
arr[1] = "PHP";
arr[2] = "Java";
arr[3] = "Python";
arr[4] = "C#";
arr[5] = "OS";
Console.WriteLine("Before Method: ");
Console.WriteLine("\nQueue Contains: ");
// Displaying the elements in myq
foreach(Object obj in myq)
{
Console.WriteLine(obj);
}
Console.WriteLine("\nArray Contains: ");
// Displaying the elements in arr
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine("arr[{0}] : {1}", i, arr[i]);
}
Console.WriteLine("After Method: ");
// Copying the entire source Queue
// to the target Array starting at
// index 2.
myq.CopyTo(arr, 2);
Console.WriteLine("\nQueue Contains: ");
// Displaying the elements in myq
foreach(Object obj in myq)
{
Console.WriteLine(obj);
}
Console.WriteLine("\nArray Contains: ");
// Displaying the elements in arr
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine("arr[{0}] : {1}", i, arr[i]);
}
}
}
输出:
Before Method:
Queue Contains:
A
B
C
D
Array Contains:
arr[0] : HTML
arr[1] : PHP
arr[2] : Java
arr[3] : Python
arr[4] : C#
arr[5] : OS
After Method:
Queue Contains:
A
B
C
D
Array Contains:
arr[0] : HTML
arr[1] : PHP
arr[2] : A
arr[3] : B
arr[4] : C
arr[5] : D
范例2:
// C# code to illustrate the
// Queue.CopyTo(Array, Int32)
// Method
using System;
using System.Collections;
class GFG {
// Driver code
public static void Main()
{
// Creating an Queue
Queue myq = new Queue();
// Adding elements to Queue
myq.Enqueue("A");
myq.Enqueue("B");
myq.Enqueue("C");
myq.Enqueue("D");
// Creates and initializes the
// one-dimensional target Array.
String[] arr = new String[2];
// adding elements to Array
arr[0] = "HTML";
arr[1] = "PHP";
arr[2] = "Java";
arr[3] = "Python";
arr[4] = "C#";
arr[5] = "OS";
Console.WriteLine("Before Method: ");
Console.WriteLine("\nQueue Contains: ");
// Displaying the elements in myq
foreach(Object obj in myq)
{
Console.WriteLine(obj);
}
Console.WriteLine("\nArray Contains: ");
// Displaying the elements in arr
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine("arr[{0}] : {1}", i, arr[i]);
}
Console.WriteLine("After Method: ");
// using Method but It will give
// Runtime Error as number of elements
// in the source Queue is greater
// than the number of elements that
// the destination array can contain
myq.CopyTo(arr, 2);
Console.WriteLine("\nQueue Contains: ");
// Displaying the elements in myq
foreach(Object obj in myq)
{
Console.WriteLine(obj);
}
Console.WriteLine("\nArray Contains: ");
// Displaying the elements in arr
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine("arr[{0}] : {1}", i, arr[i]);
}
}
}
运行时错误:
Unhandled Exception:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at (wrapper stelemref) System.Object.virt_stelemref_sealed_class(intptr, object)
参考:
- https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.queue.copyto?view=netframework-4.7.2