Type::MakeArrayType Method (Int32)
Returns a Type object representing an array of the current type, with the specified number of dimensions.
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::Type^An 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 namespace System; using namespace System::Reflection; public ref class Example { public: static void Main() { // Create a Type object that represents a one-dimensional // array of Example objects. Type^ t = Example::typeid->MakeArrayType(); Console::WriteLine( L"\r\nArray of Example: {0}", t ); // Create a Type object that represents a two-dimensional // array of Example objects. t = Example::typeid->MakeArrayType( 2 ); Console::WriteLine( L"\r\nTwo-dimensional array of Example: {0}", t ); // Demonstrate an exception when an invalid array rank is // specified. try { t = Example::typeid->MakeArrayType( -1 ); } catch ( Exception^ ex ) { Console::WriteLine( L"\r\n{0}", ex ); } // Create a Type object that represents a ByRef parameter // of type Example. t = Example::typeid->MakeByRefType(); Console::WriteLine( L"\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 = Example::typeid; MethodInfo^ mi = t2->GetMethod( L"Test" ); ParameterInfo^ pi = mi->GetParameters()[ 0 ]; Type^ pt = pi->ParameterType; Console::WriteLine( L"Are the ByRef types equal? {0}", (t == pt) ); // Create a Type object that represents a pointer to an // Example object. t = Example::typeid->MakePointerType(); Console::WriteLine( L"\r\nPointer to Example: {0}", t ); } // A sample method with a ByRef parameter. // void Test( interior_ptr<Example^> /*e*/ ) { } }; int main() { Example::Main(); } /* 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* */
Available since 8
.NET Framework
Available since 2.0
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1
