如何在 .NET Roslyn API 中获取其他继承 class 的继承 class 的值?

How can I get the value of inheritance class of other inheritance class in .NET Roslyn API?

美好的一天, 我一直在尝试在 Roslyn API.

中获取继承 class 其他继承 class 的名称的值

如下图,

当我扫描 'Face' class 时,我想获取“人类”的名字。 像这样的结构,我可以通过使用ClassDeclaration.BaseList得到第一个继承class的名字。我可以从 Face class!

中得到“头”的名字

但是我无法访问第二个继承class(人类class)。我认为 Face class.

中没有更多的树结构

问题是如果 classes 是分开的,如何获得 2 层上层(或更多)继承 class 名称。

谢谢。

获取树的语义模型,然后使用 ClassDeclarationSyntax 调用 GetDeclaredSymbol()。这将为您提供 ITypeSymbol,您可以从那里查看 BaseType。你不想仅仅因为部分 类.

就用语法来尝试这个

在 SyntaxNode 的 BaseList 属性 上创建一个递归函数。像这样的东西

private static bool IsDrivedFromHead(ClassDeclarationSyntax syntax)
        {
            if (syntax.BaseList == null)
                return false;
            if (!syntax.BaseList.Types.Any(a => a.Type.ToString() == "Namespace.Head"))
            {
                bool IsDrived = false;
                foreach (var baseType in syntax.BaseList.Types)
                {
                    var node = (CompilationUnitSyntax)baseType.SyntaxTree.GetRoot();
                    foreach (ClassDeclarationSyntax member in node.Members.Where(w=> w is ClassDeclarationSyntax))
                    {
                        IsDrived = IsInheritFromHead(member);
                        if (IsDrived)
                            break;
                    }
                    if (IsDrived)
                        break;
                }
                return IsDrived;
            }
            else
                return true;
        }