情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.GetGenericTypeDefinition メソッド

2013/12/12

現在のジェネリック型を構築する元になるジェネリック型定義を表す Type オブジェクトを返します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public virtual Type GetGenericTypeDefinition()

戻り値

型: System.Type
現在の型を構築する元になるジェネリック型を表す Type オブジェクト。

例外条件
InvalidOperationException

現在の型はジェネリック型ではありません。つまり、IsGenericTypefalse を返します。

NotSupportedException

呼び出されたメソッドは、基本クラスではサポートされません。派生クラスには実装を指定しなければなりません。

ジェネリック型定義は、他の型を構築するためのテンプレートです。たとえば、ジェネリック型定義 G<T> (C# 構文の場合) (Visual Basic の場合は G(Of T)、C++ の場合は generic <typename T> ref class G) から型 G<int> (Visual Basic の場合は G(Of Integer)) を構築およびインスタンス化できます。構築型を表す Type オブジェクトの場合、GetGenericTypeDefinition メソッドはジェネリック型定義を返します。

2 つの構築型が同じジェネリック型定義から同じ型引数を使って作成された場合、GetGenericTypeDefinition メソッドは両方の型に対して同じ Type オブジェクトを返します。

既にジェネリック型定義を表している Type オブジェクトで GetGenericTypeDefinition メソッドを呼び出した場合、現在の Type が返されます。

重要: 重要:

ジェネリック型の配列はジェネリック型ではありません。C# コード A<int>[] v;、または Visual Basic コード Dim v() As A(Of Integer) で、変数 v はジェネリック型ではありません。GetGenericTypeDefinition を呼び出す前に、IsGenericType を使用して型がジェネリックであるかどうかを判断します。

ジェネリック リフレクションで使用する用語に関する一定の条件の一覧については、IsGenericType プロパティの解説を参照してください。

通常のインスタンス作成を使用して構築型のインスタンスを作成してから、GetType メソッドおよび GetGenericTypeDefinition メソッドを使用して構築型およびジェネリック型の定義を取得するコード例を次に示します。この例では、ジェネリック型 Dictionary<TKey, TValue> を使用します。構築型は、文字列キーを使用して Test オブジェクトの Dictionary<TKey, TValue> を表します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Reflection;
using System.Collections.Generic;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += "\r\n--- Get the generic type that defines a constructed type." + "\n";

      // Create a Dictionary of Example objects, using strings for the
      // keys.       
      Dictionary<string, Example> d = new Dictionary<string, Example>();

      // Get a Type object representing the constructed type.
      //
      Type constructed = d.GetType();
      DisplayTypeInfo(outputBlock, constructed);

      Type generic = constructed.GetGenericTypeDefinition();
      DisplayTypeInfo(outputBlock, generic);
   }

   private static void DisplayTypeInfo(System.Windows.Controls.TextBlock outputBlock, Type t)
   {
      outputBlock.Text += String.Format("\r\n{0}", t) + "\n";
      outputBlock.Text += String.Format("\tIs this a generic type definition? {0}",
          t.IsGenericTypeDefinition) + "\n";
      outputBlock.Text += String.Format("\tIs it a generic type? {0}",
          t.IsGenericType) + "\n";
      Type[] typeArguments = t.GetGenericArguments();
      outputBlock.Text += String.Format("\tList type arguments ({0}):", typeArguments.Length) + "\n";
      foreach (Type tParam in typeArguments)
      {
         outputBlock.Text += String.Format("\t\t{0}", tParam) + "\n";
      }
   }
}

/* This example produces the following output:

--- Get the generic type that defines a constructed type.

System.Collections.Generic.Dictionary`2[System.String,Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: