【发布时间】:2021-09-26 03:25:33
【问题描述】:
我有一个来自 roslyn 语法树的 ClassDeclarationSyntax。 我是这样读的:
var tree = SyntaxTree.ParseText(sourceCode);
var root = (CompilationUnitSyntax)tree.GetRoot();
var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();
标识符仅包含类的名称,但没有有关命名空间的信息,因此缺少 fullType Name。像“MyClass”,但不是“Namespace1.MyClass”
获取语法的命名空间/FulltypeName 的推荐方法是什么?
【问题讨论】:
-
AFAIK,该信息来自语义树。
-
我担心你对我找到的信息的权利:social.msdn.microsoft.com/Forums/vstudio/en-US/… 但这对我来说似乎很难看。在我的情况下,如果壮举会花费很多性能:-(
-
正如那里提到的,您可以通过递归查找命名空间声明来自己构建它。当心嵌套的泛型类。
-
我通过递归查找解决方案来重读该解决方案。在我的场景中,我可以排除嵌套的泛型类。非常感谢。
-
...使用语义,这确实是正确的方法。至少在 VB.NET 代码中,任何从语法上确定它的尝试在常见情况下都会被破坏。