Прочитать на английском

Поделиться через


Type.MakeArrayType Метод

Определение

Возвращает объект Type, который представляет массив текущего типа.

Перегрузки

MakeArrayType()

Возвращает объект Type, представляющий одномерный массив текущего типа с нижней границей, равной нулю.

MakeArrayType(Int32)

Возвращает объект Type, представляющий массив текущего типа указанной размерности.

Примеры

В следующем примере кода создаются типы массивов ( refByRef в Visual Basic) и указателей Test для класса .

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*

 */

MakeArrayType()

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Возвращает объект Type, представляющий одномерный массив текущего типа с нижней границей, равной нулю.

public abstract Type MakeArrayType ();
public virtual Type MakeArrayType ();

Возвращаемое значение

Объект Type, представляющий одномерный массив текущего типа с нижней границей, равной нулю.

Исключения

Вызванный метод не поддерживается в базовом классе. Реализацию должны обеспечивать производные классы.

Текущий тип — TypedReference.

-или-

Текущий тип — ByRef. То есть IsByRef возвращает true.

Комментарии

Метод MakeArrayType предоставляет способ создания типов массивов, типы элементов которых вычисляются во время выполнения.

Примечание Среда CLR проводит различие между векторами (то есть одномерными массивами, которые всегда отсчитываются от нуля) и многомерными массивами. Вектор, который всегда имеет только одно измерение, не совпадает с многомерным массивом, имеющим только одно измерение. Эту перегрузку метода можно использовать только для создания векторных типов, и это единственный способ создания векторного типа. Используйте перегрузку MakeArrayType(Int32) метода для создания многомерных типов массивов.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

MakeArrayType(Int32)

Исходный код:
Type.cs
Исходный код:
Type.cs
Исходный код:
Type.cs

Возвращает объект Type, представляющий массив текущего типа указанной размерности.

public abstract Type MakeArrayType (int rank);
public virtual Type MakeArrayType (int rank);

Параметры

rank
Int32

Размерность массива. Это число должно быть меньше либо равно 32.

Возвращаемое значение

Объект, представляющий массив текущего типа указанной размерности.

Исключения

rank недопустим. Например, 0 или отрицательное число.

Вызванный метод не поддерживается в базовом классе.

Текущий тип — TypedReference.

-или-

Текущий тип — ByRef. То есть IsByRef возвращает true.

-или-

Значение rank больше 32.

Комментарии

Метод MakeArrayType предоставляет способ создания типов массивов, типы элементов которых вычисляются во время выполнения.

Примечание

Среда CLR проводит различие между векторами (то есть одномерными массивами, которые всегда отсчитываются от нуля) и многомерными массивами. Вектор, который всегда имеет только одно измерение, не совпадает с многомерным массивом, имеющим только одно измерение. Эту перегрузку метода нельзя использовать для создания векторного типа; Если rank значение равно 1, эта перегрузка метода возвращает тип многомерного массива, который имеет одно измерение. Используйте перегрузку MakeArrayType() метода для создания векторных типов.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0