public static string GetSubjectString(this IMetadataTypeInfo type) { var attribute = type.AndAllBaseTypes() .SelectMany(x => x.GetCustomAttributes(typeof(SubjectAttribute).FullName)) .FirstOrDefault(); if (attribute == null) { if (type.DeclaringType == null) { return(null); } return(type.DeclaringType.GetSubjectString()); } var parameters = attribute.ConstructorArguments.Select(x => { var typeArgument = x as IMetadataClassType; if (typeArgument != null) { return(new CLRTypeName(typeArgument.Type.FullyQualifiedName).ShortName); } return((string)x); }) .ToArray(); return(String.Join(" ", parameters)); }