📜  C#| Array.ConstrainedCopy()方法

📅  最后修改于: 2021-05-29 18:47:58             🧑  作者: Mango

此方法用于从指定的源索引处开始的Array中复制一系列元素,并将其粘贴到从指定的目标索引处开始的另一个Array中。如果复制未完全成功,则确保所有更改都被撤消。

句法:

public static void ConstrainedCopy (Array sourceArray, int sourceIndex, 
Array destinationArray, int destinationIndex, int length);

参数:

例外情况:

  • 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