Roslyn在{SomeSyntax} .Type下获取详细信息

时间:2015-07-10 11:32:46

标签: c# roslyn

debug

我有一个通用类:

<path d="M0,0 ... zM90,30 ... zM23,23">

如图所示,我可以解析并访问其public class NestedDict<T>: Dictionary<string, Dictionary<string, T> { } 并找出其BaseList位于调试器中。但是,我不能简单地致电TypeArgumentList来访问它,因为它不是我可以访问的公共成员。

通常情况下,在我的情况下访问baseType.Type.TypeArgumentList下的TypeArgumentList的正确方法是什么?或一般的任何类型细节?

1 个答案:

答案 0 :(得分:2)

虽然您可能知道baseType是泛型类型(所以GenericNameSyntax),但它不是唯一可能的情况,因此BaseList中的对象属于父类型( TypeSyntax)。

您只需强制转换即可访问TypeArgumentList

var tree = CSharpSyntaxTree.ParseText("public class NestedDict<T>: Dictionary<string, Dictionary<string, T> { } ");
var cu = (CompilationUnitSyntax)tree.GetRoot();
var c = (ClassDeclarationSyntax)cu.ChildNodes().Single();

var baseDeclaration = (BaseTypeSyntax)c.BaseList.ChildNodes().Single();
var baseNameSyntax = (GenericNameSyntax)baseDeclaration.Type;
Console.WriteLine(baseNameSyntax.TypeArgumentList.Arguments[0].ToFullString());
Console.WriteLine(baseNameSyntax.TypeArgumentList.Arguments[1].ToFullString());