加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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的标识符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读