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的标识符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |