ECMA-334 C# Language Specification14.5.6.1: Array access |
For an array access, the primary-no-array-creation-expression
of the element-access
must be a value of an array-type
. The number of expressions in the expression-list
must be the same as the rank of the array-type
, and each expression must be of type int , uint , long , ulong , or of a type that can be implicitly converted to one or more of these types.
The result of evaluating an array access is a variable of the element type of the array, namely the array element selected by the value(s) of the expression(s) in the expression-list
.
The run-time processing of an array access of the form P[A], where P is a primary-no-array-creation-expression
of an array-type
and A is an expression-list
, consists of the following steps:
expression-list
are evaluated in order, from left to right. Following evaluation of each index expression, an implicit conversion (13.1) to one of the following types is performed: int , uint , long , ulong . The first type in this list for which an implicit conversion exists is chosen. For instance, if the index expression is of type short then an implicit conversion to int is performed, since implicit conversions from short to int and from short to long are possible. If evaluation of an index expression or the subsequent implicit conversion causes an exception, then no further index expressions are evaluated and no further steps are executed. expression-list
is checked against the actual bounds of each dimension of the array instance referenced by P. If one or more values are out of range, a System.IndexOutOfRangeException is thrown and no further steps are executed.