C# | Array.ConstrainedCopy() Method

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: 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.

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:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to demonstrate
// ConstrainedCopy() method
using System;
using System.Collections.Generic;
  
public class GFG {
  
    // Main Method
    public static void Main()
    {
  
        try {
  
            // Creating and intializing 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();
    }
}

chevron_right


Output:

Initial Array:
Sun
Mon
Tue
Thu

Destination Array: 
Mon
Tue
Thu

Example 2: For ArgumentNullException

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

Trying to get the ConstrainedCopy while srcArr is null

Exception Thrown: System.ArgumentNullException

Example 3: For RankException

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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


filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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:



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.