はじめに
今回はジェネリック型を構築するジェネリック型定義を取得・判定する方法について紹介したいと思います。
System.Collections.Generic.Dictionary`2[System.String,System.Int32] Dictionary<string, int> ↓ // ジェネリック型定義 System.Collections.Generic.Dictionary`2[TKey,TValue] Dictionary<TKey, TValue>
概要
元になるジェネリック型定義を取得するにはType.GetGenericTypeDefinition()
を用い、ジェネリック型定義かどうか調べるにはType.IsGenericTypeDefinition
を利用します。
public virtual Type GetGenericTypeDefinition ();
現在のジェネリック型を構築する元になるジェネリック型定義を表す Type オブジェクトを返します。
Type.GetGenericTypeDefinition メソッド (System) | Microsoft Learn
public virtual bool IsGenericTypeDefinition { get; }
現在の Type が、他のジェネリック型を構築できるジェネリック型の定義を表しているかどうかを示す値を取得します。
Type.IsGenericTypeDefinition プロパティ (System) | Microsoft Learn
やり方
Console.WriteLine(typeof(Dictionary<string, int>)); // System.Collections.Generic.Dictionary`2[System.String,System.Int32] Console.WriteLine(typeof(Dictionary<string, int>).IsGenericTypeDefinition); // False Console.WriteLine(typeof(Dictionary<string, int>).GetGenericTypeDefinition()); // System.Collections.Generic.Dictionary`2[TKey,TValue] Console.WriteLine(typeof(Dictionary<string, int>).GetGenericTypeDefinition().IsGenericTypeDefinition); // True
またジェネリック型定義は以下のように取得することもできます。
Console.WriteLine(typeof(Dictionary<,>)); // System.Collections.Generic.Dictionary`2[TKey,TValue]