Type.MakeArrayType Method (Int32)
Returns a Type object representing an array of the current type, with the specified number of dimensions.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Parameters
- rank
- Type: System.Int32
The number of dimensions for the array. This number must be less than or equal to 32.
Return Value
Type: System.TypeAn object representing an array of the current type, with the specified number of dimensions.
| Exception | Condition |
|---|---|
| IndexOutOfRangeException | rank is invalid. For example, 0 or negative. |
| NotSupportedException | The invoked method is not supported in the base class. |
| TypeLoadException | The current type is TypedReference. -or- The current type is a ByRef type. That is, Type.IsByRef returns true. -or- rank is greater than 32. |
The MakeArrayType method provides a way to generate array types whose element types are computed at run time.
Note |
|---|
The common language runtime makes a distinction between vectors (that is, one-dimensional arrays that are always zero-based) and multidimensional arrays. A vector, which always has only one dimension, is not the same as a multidimensional array that happens to have only one dimension. You cannot use this method overload to create a vector type; if rank is 1, this method overload returns a multidimensional array type that happens to have one dimension. Use the MakeArrayType() method overload to create vector types. |
The following code example creates array, ref (ByRef in Visual Basic), and pointer types for the Test class.
using System; using System.Reflection; public class Example { public static void Main() { // Create a Type object that represents a one-dimensional // array of Example objects. Type t = typeof(Example).MakeArrayType(); Console.WriteLine("\r\nArray of Example: {0}", t); // Create a Type object that represents a two-dimensional // array of Example objects. t = typeof(Example).MakeArrayType(2); Console.WriteLine("\r\nTwo-dimensional array of Example: {0}", t); // Demonstrate an exception when an invalid array rank is // specified. try { t = typeof(Example).MakeArrayType(-1); } catch(Exception ex) { Console.WriteLine("\r\n{0}", ex); } // Create a Type object that represents a ByRef parameter // of type Example. t = typeof(Example).MakeByRefType(); Console.WriteLine("\r\nByRef Example: {0}", t); // Get a Type object representing the Example class, a // MethodInfo representing the "Test" method, a ParameterInfo // representing the parameter of type Example, and finally // a Type object representing the type of this ByRef parameter. // Compare this Type object with the Type object created using // MakeByRefType. Type t2 = typeof(Example); MethodInfo mi = t2.GetMethod("Test"); ParameterInfo pi = mi.GetParameters()[0]; Type pt = pi.ParameterType; Console.WriteLine("Are the ByRef types equal? {0}", (t == pt)); // Create a Type object that represents a pointer to an // Example object. t = typeof(Example).MakePointerType(); Console.WriteLine("\r\nPointer to Example: {0}", t); } // A sample method with a ByRef parameter. // public void Test(ref Example e) { } } /* This example produces output similar to the following: Array of Example: Example[] Two-dimensional array of Example: Example[,] System.IndexOutOfRangeException: Index was outside the bounds of the array. at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999 at Example.Main() ByRef Example: Example& Are the ByRef types equal? True Pointer to Example: Example* */
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Note