英語で読む

次の方法で共有


TypeBuilder.MakeGenericType(Type[]) メソッド

定義

型の配列の要素を現在のジェネリック型定義の型パラメーターで置き換え、結果の構築型を返します。

C#
public override Type MakeGenericType(params Type[] typeArguments);

パラメーター

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

C#
Type t1 = tbldr.MakeGenericType(typeof(string));
Type t2 = tbldr.MakeGenericType(typeof(string));
bool result = t1.Equals(t2);

適用対象

製品 バージョン
.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, 10
.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 2.0 (package-provided), 2.1