[Note: This topic is pre-release documentation and is subject to change in future releases. Blank topics are included as placeholders.]
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the base class for all arrays in the common language runtime.
Namespace:
System
Assembly:
mscorlib (in mscorlib.dll)
Visual Basic (Declaration)
<ComVisibleAttribute(True)> _
Public MustInherit Class Array _
Implements IList, ICollection, IEnumerable
[ComVisibleAttribute(true)]
public abstract class Array : IList,
ICollection, IEnumerable
The Array class is the base class for language implementations that support arrays. However, only the system and compilers can derive explicitly from the Array class. Users should employ the array constructs provided by the language.
An element is a value in an Array. The length of an Array is the total number of elements it can contain. The rank of an Array is the number of dimensions in the Array. The lower bound of a dimension of an Array is the starting index of that dimension of the Array; a multidimensional Array can have different bounds for each dimension.
Type objects provide information about array type declarations. Array objects with the same array type share the same Type object.
Type..::.IsArray and Type..::.GetElementType might not return the expected results with Array because if an array is cast to the type Array, the result is an object, not an array. That is, typeof(System.Array).IsArray returns false, and typeof(System.Array).GetElementType returns nullNothingnullptra null reference (Nothing in Visual Basic).
Unlike most classes, Array provides the CreateInstance method, instead of public constructors, to allow for late bound access.
The Array..::.Copy method copies elements not only between arrays of the same type but also between standard arrays of different types; it handles type casting automatically.
The Array is not guaranteed to be sorted. You must sort the Array prior to performing operations (such as BinarySearch that require the Array to be sorted.
The following code example shows how Array..::.Copy copies elements between an array of type integer and an array of type Object.
Imports System
Public Class Example
Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
' Creates and initializes a new integer array and a new Object array.
Dim myIntArray() As Integer = {1, 2, 3, 4, 5}
Dim myObjArray() As Object = {26, 27, 28, 29, 30}
' Prints the initial values of both arrays.
outputBlock.Text &= String.Format("Initially,") & vbCrLf
outputBlock.Text &= "integer array:"
PrintValues(outputBlock, myIntArray)
outputBlock.Text &= "Object array: "
PrintValues(outputBlock, myObjArray)
' Copies the first two elements from the integer array to the Object array.
Array.Copy(myIntArray, myObjArray, 2)
' Prints the values of the modified arrays.
outputBlock.Text &= ControlChars.NewLine + "After copying the first two" _
+ " elements of the integer array to the Object array," & vbCrLf
outputBlock.Text &= "integer array:"
PrintValues(outputBlock, myIntArray)
outputBlock.Text &= "Object array: "
PrintValues(outputBlock, myObjArray)
' Copies the last two elements from the Object array to the integer array.
Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, _
myIntArray.GetUpperBound(0) - 1, 2)
' Prints the values of the modified arrays.
outputBlock.Text &= ControlChars.NewLine + "After copying the last two" _
+ " elements of the Object array to the integer array," & vbCrLf
outputBlock.Text &= "integer array:"
PrintValues(outputBlock, myIntArray)
outputBlock.Text &= "Object array: "
PrintValues(outputBlock, myObjArray)
End Sub
Public Overloads Shared Sub PrintValues(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal myArr() As Object)
Dim i As Object
For Each i In myArr
outputBlock.Text &= String.Format(ControlChars.Tab + "{0}", i)
Next i
outputBlock.Text &= vbCrLf
End Sub
Public Overloads Shared Sub PrintValues(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal myArr() As Integer)
Dim i As Integer
For Each i In myArr
outputBlock.Text &= String.Format(ControlChars.Tab + "{0}", i)
Next i
outputBlock.Text &= vbCrLf
End Sub
End Class
' This code produces the following output.
'
' Initially,
' integer array: 1 2 3 4 5
' Object array: 26 27 28 29 30
'
' After copying the first two elements of the integer array to the Object array,
' integer array: 1 2 3 4 5
' Object array: 1 2 28 29 30
'
' After copying the last two elements of the Object array to the integer array,
' integer array: 1 2 3 29 30
' Object array: 1 2 28 29 30
using System;
public class Example
{
public static void Demo(System.Windows.Controls.TextBlock outputBlock)
{
// Creates and initializes a new integer array and a new Object array.
int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 };
Object[] myObjArray = new Object[5] { 26, 27, 28, 29, 30 };
// Prints the initial values of both arrays.
outputBlock.Text += String.Format("Initially:") + "\n";
outputBlock.Text += "integer array:";
PrintValues(outputBlock, myIntArray);
outputBlock.Text += "Object array: ";
PrintValues(outputBlock, myObjArray);
// Copies the first two elements from the integer array to the Object array.
Array.Copy(myIntArray, myObjArray, 2);
// Prints the values of the modified arrays.
outputBlock.Text += String.Format("\nAfter copying the first two elements of the integer array to the Object array,") + "\n";
outputBlock.Text += "integer array:";
PrintValues(outputBlock, myIntArray);
outputBlock.Text += "Object array: ";
PrintValues(outputBlock, myObjArray);
// Copies the last two elements from the Object array to the integer array.
Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2);
// Prints the values of the modified arrays.
outputBlock.Text += String.Format("\nAfter copying the last two elements of the Object array to the integer array,") + "\n";
outputBlock.Text += "integer array:";
PrintValues(outputBlock, myIntArray);
outputBlock.Text += "Object array: ";
PrintValues(outputBlock, myObjArray);
}
public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, Object[] myArr)
{
foreach (Object i in myArr)
{
outputBlock.Text += String.Format(" {0}", i);
}
outputBlock.Text += "\n";
}
public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, int[] myArr)
{
foreach (int i in myArr)
{
outputBlock.Text += String.Format(" {0}", i);
}
outputBlock.Text += "\n";
}
/*
This code produces the following output.
Initially,
integer array: 1 2 3 4 5
Object array: 26 27 28 29 30
After copying the first two elements of the integer array to the Object array,
integer array: 1 2 3 4 5
Object array: 1 2 28 29 30
After copying the last two elements of the Object array to the integer array,
integer array: 1 2 3 29 30
Object array: 1 2 28 29 30
*/
}
The following code example creates and initializes an Array and displays its properties and its elements.
Public Class Example2
Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
' Creates and initializes a new three-dimensional Array of
' type Int32.
Dim myArr As Array = Array.CreateInstance(GetType(Int32), 2, 3, 4)
Dim i As Integer
For i = myArr.GetLowerBound(0) To myArr.GetUpperBound(0)
Dim j As Integer
For j = myArr.GetLowerBound(1) To myArr.GetUpperBound(1)
Dim k As Integer
For k = myArr.GetLowerBound(2) To myArr.GetUpperBound(2)
myArr.SetValue(i * 100 + j * 10 + k, i, j, k)
Next k
Next j
Next i ' Displays the properties of the Array.
outputBlock.Text &= String.Format("The Array has {0} dimension(s) & vbCrLf and a " _
+ "total of {1} elements.", myArr.Rank, myArr.Length)
outputBlock.Text &= ControlChars.Tab + "Length" + ControlChars.Tab _
+ "Lower" + ControlChars.Tab + "Upper" & vbCrLf
For i = 0 To myArr.Rank - 1
outputBlock.Text &= String.Format("{0}:" + ControlChars.Tab + "{1}", i, _
myArr.GetLength(i))
outputBlock.Text &= String.Format(ControlChars.Tab + "{0}" + ControlChars.Tab _
+ "{1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i)) & vbCrLf
Next i
' Displays the contents of the Array.
outputBlock.Text &= "The Array contains the following values:" & vbCrLf
PrintValues(outputBlock, myArr)
End Sub
Public Shared Sub PrintValues(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal myArr As Array)
Dim myEnumerator As System.Collections.IEnumerator = _
myArr.GetEnumerator()
Dim i As Integer = 0
Dim cols As Integer = myArr.GetLength(myArr.Rank - 1)
While myEnumerator.MoveNext()
If i < cols Then
i += 1
Else
outputBlock.Text &= vbCrLf
i = 1
End If
outputBlock.Text &= String.Format(ControlChars.Tab + "{0}", myEnumerator.Current)
End While
outputBlock.Text &= vbCrLf
End Sub
End Class
' This code produces the following output.
'
' The Array has 3 dimension(s) and a total of 24 elements.
' Length Lower Upper
' 0: 2 0 1
' 1: 3 0 2
' 2: 4 0 3
' The Array contains the following values:
' 0 1 2 3
' 10 11 12 13
' 20 21 22 23
' 100 101 102 103
' 110 111 112 113
' 120 121 122 123
public class Example2
{
public static void Demo(System.Windows.Controls.TextBlock outputBlock)
{
// Creates and initializes a new three-dimensional Array of type Int32.
Array myArr = Array.CreateInstance(typeof(Int32), 2, 3, 4);
for (int i = myArr.GetLowerBound(0); i <= myArr.GetUpperBound(0); i++)
for (int j = myArr.GetLowerBound(1); j <= myArr.GetUpperBound(1); j++)
for (int k = myArr.GetLowerBound(2); k <= myArr.GetUpperBound(2); k++)
{
myArr.SetValue((i * 100) + (j * 10) + k, i, j, k);
}
// Displays the properties of the Array.
outputBlock.Text += String.Format("The Array has {0} dimension(s) and a total of {1} elements.", myArr.Rank, myArr.Length) + "\n";
outputBlock.Text += " Length Lower Upper" + "\n";
for (int i = 0; i < myArr.Rank; i++)
{
outputBlock.Text += String.Format("{0}: {1}", i, myArr.GetLength(i));
outputBlock.Text += String.Format(" {0} {1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i)) + "\n";
}
// Displays the contents of the Array.
outputBlock.Text += "The Array contains the following values:" + "\n";
PrintValues(outputBlock, myArr);
}
public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, Array myArr)
{
System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
int i = 0;
int cols = myArr.GetLength(myArr.Rank - 1);
while (myEnumerator.MoveNext())
{
if (i < cols)
{
i++;
}
else
{
outputBlock.Text += "\n";
i = 1;
}
outputBlock.Text += String.Format(" {0}", myEnumerator.Current);
}
outputBlock.Text += "\n";
}
}
System..::.Object
System..::.Array
Public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
This implementation does not provide a synchronized (thread safe) wrapper for an Array; however, .NET Framework classes based on Array provide their own synchronized version of the collection using the SyncRoot property.
Enumerating through a collection is intrinsically not a thread-safe procedure. Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.
Reference