我有一个来自 roslyn 语法树的 ClassDeclarationSyntax。
我是这样读的:
var tree = SyntaxTree.ParseText(sourceCode);
var root = (CompilationUnitSyntax)tree.GetRoot();
var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>();
标识符只包含类的名称,但没有有关命名空间的信息,因此缺少 fullType Name。类似于“MyClass”,但没有“Namespace1.MyClass”
获取语法的名称空间/FulltypeName 的推荐方法是什么?
您可以使用我编写的辅助类来执行此操作:
NamespaceDeclarationSyntax namespaceDeclarationSyntax = null;
if (!SyntaxNodeHelper.TryGetParentSyntax(classDeclarationSyntax, out namespaceDeclarationSyntax))
{
return; // or whatever you want to do in this scenario
}
var namespaceName = namespaceDeclarationSyntax.Name.ToString();
var fullClassName = namespaceName + "." + classDeclarationSyntax.Identifier.ToString();
和助手:
static class SyntaxNodeHelper
{
public static bool TryGetParentSyntax<T>(SyntaxNode syntaxNode, out T result)
where T : SyntaxNode
{
// set defaults
result = null;
if (syntaxNode == null)
{
return false;
}
try
{
syntaxNode = syntaxNode.Parent;
if (syntaxNode == null)
{
return false;
}
if (syntaxNode.GetType() == typeof (T))
{
result = syntaxNode as T;
return true;
}
return TryGetParentSyntax<T>(syntaxNode, out result);
}
catch
{
return false;
}
}
}
这里没有什么过于复杂的事情......命名空间将在语法树“向上”(因为该类包含在命名空间内)是有道理的,所以你只需要在语法树“向上”移动直到找到命名空间并将其附加到的标识符ClassDeclarationSyntax
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)