2016-04-29 13 views
4

我需要提取所有類變量。但是我的代碼返回所有變量,包括方法(locals)中聲明的變量。例如:如何檢索所有(也是唯一的)類變量?

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

回答

4

你應該篩選FieldDeclarationSyntax其中,顯然,只是指字段(也稱爲類變量)。

我不確定爲什麼你要通過MemberDeclarationSyntax的額外圈,但:cls.DescendantNodes().OfType<FieldDeclarationSyntax>()應該工作得很好,因爲無論如何你仍然會遍歷樹。

然後,FieldDeclarationSyntax.Declaration包含您感興趣的內容:VariableDeclarationSyntax