ジェネリックなオブジェクトから、オブジェクト作成時に指定された型引数を取得するには
System.Typeクラスの以下のメソッドを利用します。
public virtual Type[] GetGenericArguments()
GetGenericArgumentsメソッドは、System.Typeの配列を返します。
この配列がそのまま型引数の型となっています。
以下、サンプルです。
#region TypeSamples-01 public class TypeSamples01 : IExecutable { public void Execute() { List<int> theList = new List<int>{ 1, 2, 3, 4, 5 }; Dictionary<int, string> theDictionary = new Dictionary<int, string>{ { 1, "hoge" }, { 2, "hehe" } }; // // Genericなオブジェクトの型引数の型を取得するには、System.Typeクラスの以下のメソッドを利用する。 // // ・GetGenericArguments() // // GetGenericArgumentsメソッドは、System.Typeの配列を返すので、これを利用して型引数の型を判別する。 // var genericArgTypes = theList.GetType().GetGenericArguments(); Console.WriteLine("=============== List<int>の場合 ================="); Console.WriteLine("型引数の数={0}, 型引数の型=({1})", genericArgTypes.Count(), string.Join(",", genericArgTypes.Select(item => item.Name))); genericArgTypes = theDictionary.GetType().GetGenericArguments(); Console.WriteLine("=============== Dictionary<int, string>の場合 ================="); Console.WriteLine("型引数の数={0}, 型引数の型=({1})", genericArgTypes.Count(), string.Join(",", genericArgTypes.Select(item => item.Name))); } } #endregion
実行すると以下のように出力されます。
=============== Listの場合 ================= 型引数の数=1, 型引数の型=(Int32) =============== Dictionary の場合 ================= 型引数の数=2, 型引数の型=(Int32,String)
尚、System.Typeクラスについては、以下の記事にてその他のメソッドを取り上げていますので
よろしければ、ご参考までに。
- .NET クラスライブラリ探訪-008 (System.Type)(01)
- .NET クラスライブラリ探訪-009 (System.Type)(02)(FindXXX系メソッド)
- .NET クラスライブラリ探訪-010 (System.Type)(03)(ジェネリックスに関連するメソッド・プロパティ)
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場