2016-04-29 24 views
4

私はすべてのクラス変数を抽出する必要があります。しかし、私のコードは、メソッド(locals)で宣言された変数を含むすべての変数を返します。たとえば:すべてのクラス変数を取得するにはどうすればよいですか?

class MyClass 
{ 
    private int x; 
    private int y; 

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

私だけxyを取得する必要がありますが、私はxy、およびzを取得します。 これまでの私のコード:

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(); 
    }); 
}); 

答えて

4

あなたは(また、クラス変数として知られている)明らかに、フィールドだけを指し、FieldDeclarationSyntaxをフィルタリングする必要があります。

MemberDeclarationSyntaxの余分なフープを通過する理由はわかりませんが、cls.DescendantNodes().OfType<FieldDeclarationSyntax>()はまだツリーを横切るため、うまく動作するはずです。 VariableDeclarationSyntax

はその後、FieldDeclarationSyntax.Declarationは、あなたが興味を持っているものを保持しています。

関連する問題