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


TypeBuilder.MakeGenericType(Type[]) Метод

Определение

Замещает элементы массива типов для параметров типа определения текущего универсального типа и возвращает результирующий сконструированный тип.

public:
 override Type ^ MakeGenericType(... cli::array <Type ^> ^ typeArguments);
public override Type MakeGenericType (params Type[] typeArguments);
override this.MakeGenericType : Type[] -> Type
Public Overrides Function MakeGenericType (ParamArray typeArguments As Type()) As Type

Параметры

typeArguments
Type[]

Массив типов, который должен быть замещен параметрами типа определения текущего универсального типа.

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

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

Исключения

Текущий тип не представляет определение универсального типа. То есть IsGenericTypeDefinition возвращает false.

typeArguments имеет значение null.

-или-

Любой элемент typeArguments имеет значение null.

Свойство Module любого элемента typeArgumentsnull.

-или-

Свойство Assembly модуля любого элемента typeArgumentsnull.

Комментарии

Используйте этот метод, если для созданного кода требуется тип, созданный на основе текущего определения универсального типа. Нет необходимости вызывать CreateType метод перед вызовом MakeGenericType метода для TypeBuilder объекта , представляющего определение универсального типа. Если текущий TypeBuilder объект не представляет определение универсального типа, InvalidOperationException создается исключение .

Объект, возвращаемый этим методом, функционирует как заполнитель для созданного универсального типа в созданном коде. Это экземпляр класса, производного от Type , который имеет ограниченные возможности. В частности:

  • Чтобы получить методы, поля и конструкторы для этих сконструированных универсальных типов, используйте перегрузки GetMethod(Type, MethodInfo)методов , GetField(Type, FieldInfo)и GetConstructor(Type, ConstructorInfo) .

  • Два экземпляра, представляющие один и тот же сконструированный тип, не сравниваются как равные. Например, в следующем коде t1.Equals(t2) возвращается false:

Type^ t1 = tbldr->MakeGenericType(String::typeid);
Type^ t2 = tbldr->MakeGenericType(String::typeid);
bool result = t1->Equals(t2);
Type t1 = tbldr.MakeGenericType(typeof(string));
Type t2 = tbldr.MakeGenericType(typeof(string));
bool result = t1.Equals(t2);
Dim t1 As Type = tbldr.MakeGenericType(GetType(String))
Dim t2 As Type = tbldr.MakeGenericType(GetType(String))
Dim result As Boolean = t1.Equals(t2)

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