Open In App

C# | Array.ConstrainedCopy() Method

Last Updated : 11 Oct, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

This method is used to copy a range of elements from an Array starting at the specified source index and pastes them to another Array starting at the specified destination index. Guarantees that all changes are undone if the copy does not succeed completely. Syntax:

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

Parameters: 

sourceArray: It is the Array that contains the data to copy. sourceIndex: It 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.

Exceptions:

  • ArgumentNullException: If the sourceArray or destinationArray is null.
  • RankException: If the sourceArray and destinationArray have different ranks.
  • ArrayTypeMismatchException: If the sourceArray type is neither the same as nor derived from the destinationArray type.
  • InvalidCastException: At least one element in sourceArray cannot be cast to the type of destinationArray.
  • ArgumentOutOfRangeException: If the sourceIndex is less than the lower bound of the first dimension of sourceArray or destinationIndex is less than the lower bound of the first dimension of destinationArray or length is less than zero.
  • ArgumentException: If the length is greater than the number of elements from sourceIndex to the end of sourceArray Or the length is greater than the number of elements from destinationIndex to the end of destinationArray.

Below programs illustrate the use of Array.ConstrainedCopy(Array, Int32, Array, Int32, Int32) Method: Example 1: 

CSHARP




// 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();
    }
}


Output:

Initial Array:
Sun
Mon
Tue
Thu

Destination Array: 
Mon
Tue
Thu

Example 2: For ArgumentNullException 

CSHARP




// 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();
    }
}


Output:

Trying to get the ConstrainedCopy while srcArr is null

Exception Thrown: System.ArgumentNullException

Example 3: For RankException 

CSHARP




// 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();
}
}


Output:

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

Example 4: For ArrayTypeMismatchException 

CSharp




// 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();
}
}


Output:

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

Example 5: For ArgumentOutOfRangeException 

CSHARP




// 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();
}
}


Output:

Initial Array:
Sun
Mon
Tue
Thu

Trying to get the ConstrainedCopy of length less than zero
Exception Thrown: System.ArgumentOutOfRangeException

Example 6: For ArgumentException 

CSharp




// 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();
}
}


Output:

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

Reference:



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads