此方法用于从指定的源索引处开始的Array中复制一系列元素,并将其粘贴到从指定的目标索引处开始的另一个Array中。如果复制未完全成功,则确保所有更改都被撤消。
句法:
public static void ConstrainedCopy (Array sourceArray, int sourceIndex,
Array destinationArray, int destinationIndex, int length);
参数:
sourceArray: It is the Array that contains the data to copy.
sourceIndex: Its is the 32-bit integer that represents the index in the sourceArray at which copying begins.
destinationArray: It is the Array that receives the data.
destinationIndex: It is the 32-bit integer that represents the index in the destinationArray at which storing begins.
length: It is the 32-bit integer that represents the number of elements to copy.
例外情况:
- ArgumentNullException:如果sourceArray或destinationArray为null。
- RankException:如果sourceArray和destinationArray具有不同的等级。
- ArrayTypeMismatchException:如果sourceArray类型既不是目标数组类型也不是从destinationArray类型派生。
- InvalidCastException:无法将sourceArray中的至少一个元素强制转换为destinationArray的类型。
- ArgumentOutOfRangeException:如果sourceIndex小于sourceArray的第一个维度的下限,或者destinationIndex小于destinationArray的第一个维度的下限,或者length小于零。
- ArgumentException:如果长度大于从sourceIndex到sourceArray末尾的元素数,或者大于从destinationIndex到destinationArray末尾的元素数。
下面的程序说明了Array.ConstrainedCopy(Array,Int32,Array,Int32,Int32)方法的使用:
范例1:
// C# program to demonstrate
// ConstrainedCopy() method
using System;
using System.Collections.Generic;
public class GFG {
// Main Method
public static void Main()
{
try {
// Creating and initializing new the String
String[] srcArr = { "Sun", "Mon", "Tue", "Thu" };
// Creating the object of empty String Array
String[] destArr = new String[10];
// Display the values of the myArr.
Console.WriteLine("Initial Array:");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(srcArr);
// getting a ConstrainedCopy in destArr
// from srcArr using method ConstrainedCopy()
Array.ConstrainedCopy(srcArr, 1, destArr, 0, 3);
// Display the value of the destArr
Console.WriteLine("Destination Array: ");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(destArr);
}
catch (ArgumentNullException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (RankException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArrayTypeMismatchException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (InvalidCastException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentOutOfRangeException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
// Defining the method
// PrintIndexAndValues
public static void PrintIndexAndValues(String[] myArr)
{
for (int i = 0; i < myArr.Length; i++) {
Console.WriteLine("{0}", myArr[i]);
}
Console.WriteLine();
}
}
Initial Array:
Sun
Mon
Tue
Thu
Destination Array:
Mon
Tue
Thu
示例2:对于ArgumentNullException
// C# program to demonstrate
// ConstrainedCopy() method
// For ArgumentNullException
using System;
using System.Collections.Generic;
class GFG {
// Main Method
public static void Main()
{
try {
// Creating and initializing the
// String Array with null
String[] srcArr = null;
// Creating the object of empty String Array
String[] destArr = new String[10];
// getting a ConstrainedCopy in destArr
// from srcArr using method ConstrainedCopy()
Console.WriteLine("Trying to get the ConstrainedCopy "
+"while srcArr is null");
Console.WriteLine();
Array.ConstrainedCopy(srcArr, 1, destArr, 0, 3);
// Display the value of the destArr.
Console.WriteLine("Destination Array: ");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(destArr);
}
catch (ArgumentNullException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (RankException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArrayTypeMismatchException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (InvalidCastException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentOutOfRangeException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
// Defining the method
// PrintIndexAndValues
public static void PrintIndexAndValues(String[] myArr)
{
for (int i = 0; i < myArr.Length; i++) {
Console.WriteLine("{0}", myArr[i]);
}
Console.WriteLine();
}
}
Trying to get the ConstrainedCopy while srcArr is null
Exception Thrown: System.ArgumentNullException
示例3:对于RankException
// C# program to demonstrate
// ConstrainedCopy() method
// For RankException
using System;
using System.Collections.Generic;
public class GFG {
// Main Method
public static void Main()
{
try {
// Creating and initializing new the String
String[] srcArr = { "Sun", "Mon", "Tue", "Thu" };
// Creating the object of empty String Array
String[, ] destArr = new String[10, 5];
// Display the values of the myArr.
Console.WriteLine("Initial Array:");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(srcArr);
// getting a ConstrainedCopy in destArr
// from srcArr using method ConstrainedCopy()
Console.WriteLine("Trying to get the ConstrainedCopy "
+"in destArr of rank 2");
Console.WriteLine("while rank of srcArr is 1");
Array.ConstrainedCopy(srcArr, 1, destArr, 0, 3);
}
catch (ArgumentNullException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (RankException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArrayTypeMismatchException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (InvalidCastException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentOutOfRangeException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
// Defining the method
// PrintIndexAndValues
public static void PrintIndexAndValues(String[] myArr)
{
for (int i = 0; i < myArr.Length; i++) {
Console.WriteLine("{0}", myArr[i]);
}
Console.WriteLine();
}
}
Initial Array:
Sun
Mon
Tue
Thu
Trying to get the ConstrainedCopy in destArr of rank 2
while rank of srcArr is 1
Exception Thrown: System.RankException
示例4:对于ArrayTypeMismatchException
// C# program to demonstrate
// ConstrainedCopy() method
// For ArrayTypeMismatchException
using System;
using System.Collections.Generic;
class GFG {
// Main Method
public static void Main()
{
try {
// Creating and initializing new the String
String[] srcArr = { "Sun", "Mon", "Tue", "Thu" };
// Creating the object of
// empty Integer Array
int[] destArr = new int[10];
// Display the values of the myArr.
Console.WriteLine("Initial Array:");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(srcArr);
// getting a ConstrainedCopy in destArr
// from srcArr using method ConstrainedCopy()
Console.WriteLine("Trying to get the "
+"ConstrainedCopy in destArr of type int");
Console.WriteLine("but srcArr is of type String");
Array.ConstrainedCopy(srcArr, 1, destArr, 0, 3);
}
catch (ArgumentNullException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (RankException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArrayTypeMismatchException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (InvalidCastException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentOutOfRangeException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
// Defining the method
// PrintIndexAndValues
public static void PrintIndexAndValues(String[] myArr)
{
for (int i = 0; i < myArr.Length; i++) {
Console.WriteLine("{0}", myArr[i]);
}
Console.WriteLine();
}
}
Initial Array:
Sun
Mon
Tue
Thu
Trying to get the ConstrainedCopy in destArr of type int
but srcArr is of type String
Exception Thrown: System.ArrayTypeMismatchException
示例5:对于ArgumentOutOfRangeException
// C# program to demonstrate
// ConstrainedCopy() method
// For ArgumentOutOfRangeException
using System;
using System.Collections.Generic;
public class GFG {
// Main Method
public static void Main()
{
try {
// Creating and initializing
// new the String
String[] srcArr = {"Sun", "Mon", "Tue", "Thu"};
// Creating the object of empty String Array
String[] destArr = new String[10];
// Display the values of the myArr.
Console.WriteLine("Initial Array:");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(srcArr);
// getting a ConstrainedCopy
// in destArr from srcArr
// using method ConstrainedCopy()
Console.WriteLine("Trying to get the ConstrainedCopy"
+" of length less than zero");
Array.ConstrainedCopy (srcArr,1,destArr ,0,-1);
}
catch (ArgumentNullException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (RankException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArrayTypeMismatchException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (InvalidCastException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentOutOfRangeException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
// Defining the method
// PrintIndexAndValues
public static void PrintIndexAndValues(String[] myArr)
{
for (int i = 0; i < myArr.Length; i++) {
Console.WriteLine("{0}", myArr[i]);
}
Console.WriteLine();
}
}
Initial Array:
Sun
Mon
Tue
Thu
Trying to get the ConstrainedCopy of length less than zero
Exception Thrown: System.ArgumentOutOfRangeException
示例6:对于ArgumentException
// C# program to demonstrate
// ConstrainedCopy() method
// For ArgumentException
using System;
using System.Collections.Generic;
public class GFG {
// Main Method
public static void Main()
{
try {
// Creating and initializing new the String
String[] srcArr = { "Sun", "Mon", "Tue", "Thu" };
// Creating the object of empty String Array
String[] destArr = new String[10];
// Display the values of the myArr.
Console.WriteLine("Initial Array:");
// calling the PrintIndexAndValues()
// method to print
PrintIndexAndValues(srcArr);
// getting a ConstrainedCopy
// in destArr from srcArr
// using method ConstrainedCopy()
Console.WriteLine("Trying to get the ConstrainedCopy"
+" of length is greater than the number ");
Console.WriteLine("of elements from sourceIndex"
+" to the end of sourceArray.");
Console.WriteLine();
Array.ConstrainedCopy(srcArr, 1, destArr, 0, 4);
}
catch (ArgumentNullException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (RankException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArrayTypeMismatchException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (InvalidCastException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentOutOfRangeException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
catch (ArgumentException e) {
Console.Write("Exception Thrown: ");
Console.Write("{0}", e.GetType(), e.Message);
}
}
// Defining the method
// PrintIndexAndValues
public static void PrintIndexAndValues(String[] myArr)
{
for (int i = 0; i < myArr.Length; i++) {
Console.WriteLine("{0}", myArr[i]);
}
Console.WriteLine();
}
}
Initial Array:
Sun
Mon
Tue
Thu
Trying to get the ConstrainedCopy of length is greater than the number
of elements from sourceIndex to the end of sourceArray.
Exception Thrown: System.ArgumentException
参考:
- https://docs.microsoft.com/zh-cn/dotnet/api/system.array.constrainedcopy?view=netframework-4.7.2