c# – 从Roslyn ClassDeclarationSyntax获取类FullName(包括命名
发布时间:2020-12-15 18:10:49 所属栏目:百科 来源:网络整理
导读:我在roslyn中的语法树中有一个ClassDeclarationSyntax. 我这样读: var tree = SyntaxTree.ParseText(sourceCode);var root = (CompilationUnitSyntax)tree.GetRoot();var classes = root.DescendantNodes().OfTypeClassDeclarationSyntax(); 该标识符仅包含
|
我在roslyn中的语法树中有一个ClassDeclarationSyntax.
我这样读: var tree = SyntaxTree.ParseText(sourceCode); var root = (CompilationUnitSyntax)tree.GetRoot(); var classes = root.DescendantNodes().OfType<ClassDeclarationSyntax>(); 该标识符仅包含类的名称,但不包含有关名称空间的信息,因此缺少fullType名称.喜欢“MyClass”但noch“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 = namespace.Name + "." + 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的标识符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
