C# LANGUAGE REFERENCE
8 Copyright Microsoft Corporation 1999-2000. All Rights Reserved.
class Test
{
static void Main() {
int[] a1; // single-dimensional array of int
int[,] a2; // 2-dimensional array of int
int[,,] a3; // 3-dimensional array of int
int[][] j2; // "jagged" array: array of (array of int)
int[][][] j3; // array of (array of (array of int))
}
}
shows a variety of local variable declarations that use array types with int as the element type.
Arrays are reference types, and so the declaration of an array variable merely sets aside space for the
reference to the array. Array instances are actually created via array initializers and array creation
expressions. The example
class Test
{
static void Main() {
int[] a1 = new int[] {1, 2, 3};
int[,] a2 = new int[,] {{1, 2, 3}, {4, 5, 6}};
int[,,] a3 = new int[10, 20, 30];
int[][] j2 = new int[3][];
j2[0] = new int[] {1, 2, 3};
j2[1] = new int[] {1, 2, 3, 4, 5, 6};
j2[2] = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
}
}
shows a variety of array creation expressions. The variables a1, a2 and a3 denote rectangular arrays, and
the variable j2 denotes a jagged array. It should be no surprise that these terms are based on the shapes of
the arrays. Rectangular arrays always have a rectangular shape. Given the length of each dimension of the
array, its rectangular shape is clear. For example, the length of a3’s three dimensions are 10, 20, and 30
respectively, and it is easy to see that this array contains 10*20*30 elements.
In contrast, the variable j2 denotes a “jagged” array, or an “array of arrays”. Specifically, j2 denotes an
array of an array of int, or a single-dimensional array of type int[]. Each of these int[] variables can
be initialized individually, and this allows the array to take on a jagged shape. The example gives each of
the int[] arrays a different length. Specifically, the length of j2[0] is 3, the length of j2[1] is 6, and
the length of j2[2] is 9.
It is important to note that the element type and number of dimensions are part of an array’s type, but that
the length of each dimension is not part of the array’s type. This split is made clear in the language syntax,
as the length of each dimension is specified in the array creation expression rather than in the array type.
For instance the declaration
int[,,] a3 = new int[10, 20, 30];
has an array type of int[,,] and an array creation expression of new int[10, 20, 30].
For local variable and field declarations, a shorthand form is permitted so that it is not necessary to re-state
the array type. For instance, the example
int[] a1 = new int[] {1, 2, 3};
can be shortened to
int[] a1 = {1, 2, 3};
without any change in program semantics.