如何检索所有(也是唯一的)类变量?

时间:2016-04-29 15:16:05

标签: c# roslyn

我需要提取所有类变量。但我的代码返回所有变量,包括在方法(本地)中声明的变量。例如:

class MyClass
{
    private int x;
    private int y;

    public void MyMethod()
    {
        int z = 0;
    }
}

我只需要xy,但我得到xyz。 到目前为止我的代码:

SyntaxTree tree = CSharpSyntaxTree.ParseText(content);
IEnumerable<SyntaxNode> nodes = ((CompilationUnitSyntax) tree.GetRoot()).DescendantNodes();

List<ClassDeclarationSyntax> classDeclarationList = nodes
    .OfType<ClassDeclarationSyntax>().ToList();

classDeclarationList.ForEach(cls =>
{
    List<MemberDeclarationSyntax> memberDeclarationSyntax = cls.Members.ToList();
    memberDeclarationSyntax.ForEach(x =>
    {
        //contains all variables
        List<VariableDeclarationSyntax> variables = x.DescendantNodes()
           .OfType<VariableDeclarationSyntax>().ToList();
    });
});

1 个答案:

答案 0 :(得分:4)

你应该过滤FieldDeclarationSyntax,显然只会引用字段(也称为类变量)。

我不确定为什么你要经历MemberDeclarationSyntax的额外箍:cls.DescendantNodes().OfType<FieldDeclarationSyntax>()应该工作得很好,因为你仍然要穿越树反正。

之后,FieldDeclarationSyntax.Declaration拥有您感兴趣的内容:VariableDeclarationSyntax