次の方法で共有


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[]

現在のジェネリック型定義の型パラメーターに置き換えられる型の配列。

戻り値

typeArguments の要素を現在のジェネリック型の型パラメーターで置き換えることによって作られる構築型を表す Type

例外

現在の型はジェネリック型の定義を表していません。 つまり、IsGenericTypeDefinitionfalse を返します。

typeArgumentsnullです。

または

typeArguments のどの要素も null です。

typeArguments のどの要素の Module プロパティも null です。

- または -

typeArguments のどの要素のモジュールの Assembly プロパティも null です。

注釈

出力されたコードで、現在のジェネリック型定義から構築された型が必要な場合は、このメソッドを使用します。 ジェネリック型定義を表す で メソッドをCreateType呼び出す前にTypeBuilder、 メソッドを呼び出MakeGenericTypeす必要はありません。 現在 TypeBuilder の がジェネリック型の定義を表していない場合は、 InvalidOperationException がスローされます。

このメソッドによって返される オブジェクトは、出力されたコードで構築されたジェネリック型のプレースホルダーとして機能します。 これは、機能が制限されている から Type 派生したクラスのインスタンスです。 特に次の点に違いがあります。

  • これらの構築されたジェネリック型のメソッド、フィールド、コンストラクターを取得するには、および GetConstructor(Type, ConstructorInfo) メソッドのGetMethod(Type, MethodInfo)GetField(Type, FieldInfo)オーバーロードを使用します。

  • 同じ構築された型を表す 2 つのインスタンスは、等しいと比較されません。 たとえば、次のコード 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)

適用対象