【问题标题】:Roslyn getting details under {SomeSyntax}.TypeRoslyn 在 {SomeSyntax}.Type 下获取详细信息
【发布时间】:2015-07-10 20:47:08
【问题描述】:

我有一个通用类:

public class NestedDict<T>: Dictionary<string, Dictionary<string, T> { } 

如图所示,我可以解析并访问它的BaseList,并发现它的TypeArgumentList 就在调试器中。但是,我不能简单地调用baseType.Type.TypeArgumentList 来访问它,因为它不是我可以访问的公共成员。

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

【问题讨论】:

    标签: c# roslyn


    【解决方案1】:

    虽然您可能知道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());
    

    【讨论】:

    • 感谢您的澄清 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2020-10-08
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多