Array Class 
Array
 class is the mother of all arrays and provides functionality for 
creating, manipulating, searching, and sorting arrays in .NET Framework.
  
  
Array
 class, defined in the System namespace, is the base class for arrays in
 C#. Array class is an abstract base class that means we cannot create 
an instance of the Array class.  
  
Creating an Array 
  
Array
 class provides the CreateInstance method to construct an array. The 
CreateInstance method takes first parameter as the type of items and 
second and third parameters are the dimension and their range. Once an 
array is created, we use SetValue method to add items to an array.  
  
The
 following code snippet creates an array and adds three items to the 
array. As you can see the type of the array items is string and range is
 3. You will get an error message if you try to add 4th item to the array.  
  
Array stringArray = Array.CreateInstance(typeof(String), 3); 
stringArray.SetValue("Mahesh Chand", 0); 
stringArray.SetValue("Raj Kumar", 1); 
stringArray.SetValue("Neel Beniwal", 2); 
  
Note: Calling SetValue on an existing item of an array overrides the previous item value with the new value. 
  
The code snippet in Listing 2 creates a multi-dimensional array. 
  
Array intArray3D = Array.CreateInstance(typeof(Int32), 2, 3, 4); 
for (int i = intArray3D.GetLowerBound(0); i <= intArray3D.GetUpperBound(0); i++) 
    for (int j = intArray3D.GetLowerBound(1); j <= intArray3D.GetUpperBound(1); j++) 
        for (int k = intArray3D.GetLowerBound(2); k <= intArray3D.GetUpperBound(2); k++) 
        { 
            intArray3D.SetValue((i * 100) + (j * 10) + k, i, j, k); 
        } 
  
foreach (int ival in intArray3D) 
{ 
    Console.WriteLine(ival); 
} 
Listing 2 
Array Properties 
  
Table 1 describes Array class properties.   
  
 
 | 
IsFixedSize | 
Return a value indicating if an array has a fixed size or not. | 
 | 
IsReadOnly | 
Returns a value indicating if an array is read-only or not. | 
 | 
LongLength | 
Returns a 64-bit integer that represents total number of items in all the dimensions of an array. | 
 | 
Length | 
Returns a 32-bit integer that represents the total number of items in all the dimensions of an array. | 
 | 
Rank | 
Returns the number of dimensions of an array. | 
  
Table 1 
The code snippet in Listing 3 creates an array and uses Array properties to display property values.  
  
int[] intArray = new int[3] {0, 1, 2}; 
if(intArray.IsFixedSize) 
{ 
    Console.WriteLine("Array is fixed size"); 
    Console.WriteLine("Size :" + intArray.Length.ToString()); 
    Console.WriteLine("Rank :" + intArray.Rank.ToString()); 
} 
Listing 3 
The output of Listing looks like Figure 2. 
  
 

Figure 2  
Searching for an Item in an Array  
The
 BinarySearch static method of Array class can be used to search for an 
item in an array. This method uses the binary search algorithm to search
 for an item. The method takes at least two parameters. First parameter 
is the array in which you would like to search and the second parameter 
is an object that is the item you are looking for. If an item is found 
in the array, the method returns the index of that item (based on first 
item as 0th item). Otherwise method returns a negative value.  
Note: You must sort an array before searching. See comments in this article.
Listing 4 uses BinarySearch method to search an array for a string.   
// Create an array and add 5 items to it 
Array stringArray = Array.CreateInstance(typeof(String), 5); 
stringArray.SetValue("Mahesh", 0); 
stringArray.SetValue("Raj", 1); 
stringArray.SetValue("Neel", 2); 
stringArray.SetValue("Beniwal", 3); 
stringArray.SetValue("Chand", 4); 
  
// Find an item 
object name = "Neel"; 
int nameIndex = Array.BinarySearch(stringArray, name); 
if (nameIndex >= 0) 
    Console.WriteLine("Item was at " + nameIndex.ToString() + "th position"); 
else 
    Console.WriteLine("Item not found"); 
Listing 4 
Sorting Items in an Array  
The
 Sort static method of the Array class can be used to sort array items. 
This method has many overloaded forms. The simplest form takes as a 
parameter the array you want to sort. Listing 5 uses the Sort method to 
sort array items. Using the Sort method, you can also sort a partial 
list of items.  
// Create an array and add 5 items to it 
Array stringArray = Array.CreateInstance(typeof(String), 5); 
stringArray.SetValue("Mahesh", 0); 
stringArray.SetValue("Raj", 1); 
stringArray.SetValue("Neel", 2); 
stringArray.SetValue("Beniwal", 3); 
stringArray.SetValue("Chand", 4); 
  
// Find an item 
object name = "Neel"; 
int nameIndex = Array.BinarySearch(stringArray, name); 
if (nameIndex >= 0) 
    Console.WriteLine("Item was at " + nameIndex.ToString() + "th position"); 
else 
    Console.WriteLine("Item not found"); 
  
Console.WriteLine(); 
  
Console.WriteLine("Original Array"); 
Console.WriteLine("---------------------"); 
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
  
Console.WriteLine(); 
Console.WriteLine("Sorted Array"); 
Console.WriteLine("---------------------");  
Array.Sort(stringArray); 
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
 
Listing 5 
The output of Listing 5 looks like Figure 3.  
 

Figure 3  
Alternatively
 the Sort method takes starting index and number of items after that 
index. The following code snippet sorts 3 items starting at 2nd position.  
Array.Sort(stringArray, 2, 3); 
The new output looks like Figure 4.  
 

Figure 4  
Getting and Setting Values  
The
 GetValue and SetValue methods of the Array class can be used to get and
 set values of an array's items. The code listed in Listing 4 creates a 
2-dimensional array instance using the CreateInstance method. After that
 I use the SetValue method to add values to the array.   
In the end, I find number of items in both dimensions and use GetValue method to read values and display on the console.   
Array names = Array.CreateInstance(typeof(String), 2, 4); 
names.SetValue("Rosy", 0, 0); 
names.SetValue("Amy", 0, 1); 
names.SetValue("Peter", 0, 2); 
names.SetValue("Albert", 0, 3); 
names.SetValue("Mel", 1, 0); 
names.SetValue("Mongee", 1, 1); 
names.SetValue("Luma", 1, 2); 
names.SetValue("Lara", 1, 3); 
int items1 = names.GetLength(0); 
int items2 = names.GetLength(1); 
for (int i = 0; i < items1; i++) 
    for (int j = 0; j < items2; j++) 
        Console.WriteLine(i.ToString() + "," + j.ToString() + ": " + names.GetValue(i, j));  
Listing 6 
The output of Listing 6 generates Figure 5.  
 

Figure 5  
Reverse an array items 
The
 Reverse static method of the Array class reverses the order of items in
 an array. Similar to the Sort method, you can just pass an array as a 
parameter of the Reverse method.   
Array stringArray = Array.CreateInstance(typeof(String), 5); 
stringArray.SetValue("Mahesh", 0); 
stringArray.SetValue("Raj", 1); 
stringArray.SetValue("Neel", 2); 
stringArray.SetValue("Beniwal", 3); 
stringArray.SetValue("Chand", 4); 
             
Console.WriteLine("Original Array"); 
Console.WriteLine("---------------------"); 
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
  
Console.WriteLine(); 
Console.WriteLine("Reversed Array"); 
Console.WriteLine("---------------------"); 
Array.Reverse(stringArray); 
//  Array.Sort(stringArray, 2, 3); 
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
  
Console.WriteLine(); 
Console.WriteLine("Double Reversed Array"); 
Console.WriteLine("---------------------"); 
Array.Reverse(stringArray); 
//  Array.Sort(stringArray, 2, 3); 
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
Listing 7 
The output of Listing 7 generates Figure 6.  
  
 

Figure 6  
Clear an array items 
The
 Clear static method of the Array class removes all items of an array 
and sets its length to zero. This method takes three parameters - first 
an array object, second starting index of the array and third is number 
of elements. The following code clears two elements from the array 
starting at index 1 (means second element of the array).   
Array.Clear(stringArray, 1, 2);
 
Note: Keep in mind, the Clear method does not delete items. Just clear the values of the items. 
The code listed in Listing 8 clears two items from the index 1.  
Array stringArray = Array.CreateInstance(typeof(String), 5); 
stringArray.SetValue("Mahesh", 0); 
stringArray.SetValue("Raj", 1); 
stringArray.SetValue("Neel", 2); 
stringArray.SetValue("Beniwal", 3); 
stringArray.SetValue("Chand", 4); 
Console.WriteLine("Original Array"); 
Console.WriteLine("---------------------"); 
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
  
Console.WriteLine(); 
Console.WriteLine("Clear Items"); 
Console.WriteLine("---------------------"); 
Array.Clear(stringArray, 1, 2); 
  
foreach (string str in stringArray) 
{ 
    Console.WriteLine(str); 
} 
Listing 8 
The
 output of Listing 8 generates Figure 7. As you can see from Figure 7, 
the values of two items from the output are missing but actual items are
 there.  
 

Figure 7  
Get the size of an array 
The
 GetLength method returns the number of items in an array. The 
GetLowerBound and GetUppperBound methods return the lower and upper 
bounds of an array respectively. All these three methods take at least a
 parameter, which is the index of the dimension of an array. The 
following code snippet uses all three methods.   
Console.WriteLine(stringArray.GetLength(0).ToString()); 
Console.WriteLine(stringArray.GetLowerBound(0).ToString()); 
Console.WriteLine(stringArray.GetUpperBound(0).ToString());   
Copy an array  
The
 Copy static method of the Array class copies a section of an array to 
another array. The CopyTo method copies all the elements of an array to 
another one-dimension array. The code listed in Listing 9 copies 
contents of an integer array to an array of object types.   
// Creates and initializes a new Array of type Int32. 
Array oddArray = Array.CreateInstance(Type.GetType("System.Int32"), 5); 
oddArray.SetValue(1, 0); 
oddArray.SetValue(3, 1); 
oddArray.SetValue(5, 2); 
oddArray.SetValue(7, 3); 
oddArray.SetValue(9, 4); 
// Creates and initializes a new Array of type Object. 
Array objArray = Array.CreateInstance(Type.GetType("System.Object"), 5); 
Array.Copy(oddArray, oddArray.GetLowerBound(0), objArray, objArray.GetLowerBound(0), 4); 
int items1 = objArray.GetUpperBound(0); 
for (int i = 0; i < items1; i++) 
    Console.WriteLine(objArray.GetValue(i).ToString()); 
Listing 9 
You
 can even copy a part of an array to another array by passing the number
 of items and starting item in the Copy method. The following format 
copies a range of items from an Array starting at the specified source 
index and pastes them to another Array starting at the specified destination index.  
public static void Copy(Array, int, Array, int, int);  
Clone an Array  
Clone method creates a shallow copy of an array. A shallow copy of an Array copies only the elements of the Array,
 whether they are reference types or value types, but it does not copy 
the objects that the references refer to. The references in the new Array point to the same objects that the references in the original Array point to. 
The following code snippet creates a cloned copy of an array of strings.  
string[] clonedArray = (string[])stringArray.Clone();