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

Posted

技术标签:

【中文标题】如何在 .NET Roslyn API 中获取其他继承类的继承类的值?【英文标题】:How can I get the value of inheritance class of other inheritance class in .NET Roslyn API? 【发布时间】:2021-02-08 09:37:01 【问题描述】:

美好的一天, 我一直在尝试获取 Roslyn API 中其他继承类的继承类名称的值。

如下图,

当我扫描“Face”类时,我想得到“Human”的名字。 像这样的结构,我可以通过ClassDeclaration.BaseList得到第一个继承类名。我可以从 Face 类中得到“Head”的名字!

但我无法访问第二个继承类(人类类)。我认为 Face 类中没有更多的树结构。

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

谢谢。

【问题讨论】:

您用来访问基类的代码是什么?如果这只是 IDE 中的代码检查,请转到 Head 类并在那里检查 BaseList。 感谢您的回复。这不仅仅是 IDE 中的代码检查。我正在使用 sonarqube(源代码检查工具)。此工具使 c# 项目构建以便在代码检查运行时检查源代码。但据我所知,Roslyn API 是基于语法树的。所以我认为没有办法访问最高继承关系的类名。如果您知道另一种获取价值的方法,请告诉我。 【参考方案1】:

获取树的 SemanticModel,然后使用 ClassDeclarationSyntax 调用 GetDeclaredSymbol()。这将为您提供 ITypeSymbol,您可以从那里查看 BaseType。您不想仅仅因为部分类而尝试使用语法。

【讨论】:

我已经解决了这个问题。非常感谢您的回答!

以上是关于如何在 .NET Roslyn API 中获取其他继承类的继承类的值?的主要内容,如果未能解决你的问题,请参考以下文章

在 .net 核心中为 Roslyn 动态选择引用

RyuJIT 和 Roslyn 有啥区别?

如何获取 Roslyn 中 NamedTypeSymbol 的所有适用方法,包括扩展方法?

什么/为什么在 Asp.Net 的 /bin 文件夹中“需要”Roslyn

Net中的代码规范工具及使用

[.NET大牛之路 006] 了解 Roslyn 编译器