C# | Array.ConstrainedCopy() Method (original) (raw)

Last Updated : 11 Oct, 2022

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:

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: