namespace System
{
public static class SystemExtensionMethods
{
public static string GetAncestry( this object target )
{
return string.Join( " -> ",
target.GetTypes().Reverse().Select( t => FormatName( t ) ).ToArray() );
}
public static IEnumerable<Type> GetTypes( this object target )
{
for( Type t = target.GetType(); t != null; t = t.BaseType )
yield return t;
}
public static string FormatName( this Type type )
{
return FormatName( type, TypeNameLanguage.CSharp );
}
public static string FormatName( this Type type, TypeNameLanguage format )
{
if( !type.IsGenericType )
return type.Name;
int pos = type.Name.LastIndexOf( '`' );
string name = ( pos >= 0 ? type.Name.Substring( 0, pos ) : type.Name );
return name + (format == TypeNameLanguage.CSharp ? "<" : "(Of ")
+ string.Join( ",", type.GetGenericArguments()
.Select( t => FormatName( t, format ) ).ToArray() )
+ (format == TypeNameLanguage.CSharp ? ">" : ")");
}
public enum TypeNameLanguage
{
CSharp = 0, VB = 1
}
}
}