概要
var x = new List<int>(); var y = new Dictionary<int, string>(); print( x.GetType().ToString() ); // System.Collections.Generic.List`1[System.Int32] print( y.GetType().ToString() ); // System.Collections.Generic.Dictionary`2[System.Int32,System.String]
型情報をType.GetType()
で取得して Type.ToString()
を参照することで
名前空間付きで型の名前を表す文字列が取得可能ですが、
ジェネリッククラスの場合、型引数の数も文字列に含まれてしまいます
下記の拡張メソッドを使用することで
名前空間付きで何が型引数に指定されているのかを文字列で取得可能になります
using System; using System.Linq; public static class TypeExtensions { public static string GetGenericNameWithNamespace( this Type self ) { if ( !self.IsGenericType ) { return self.ToString(); } return string.Format( "{0}<{1}>", self.ToString().Split( '`' )[0], string.Join( ", " , self.GetGenericArguments().Select( c => c.GetGenericNameWithNamespace() ) ) ); } }
var x = new List<int>(); var y = new Dictionary<int, string>(); print( x.GetType().GetGenericNameWithNamespace() ); // System.Collections.Generic.List<System.Int32> print( y.GetType().GetGenericNameWithNamespace() ); // System.Collections.Generic.Dictionary<System.Int32, System.String>