我需要提取所有类变量。但我的代码返回所有变量,包括在方法(本地)中声明的变量。例如:
class MyClass
{
private int x;
private int y;
public void MyMethod()
{
int z = 0;
}
}
我只需要x
和y
,但我得到x
,y
和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();
});
});
答案 0 :(得分:4)
你应该过滤FieldDeclarationSyntax
,显然只会引用字段(也称为类变量)。
我不确定为什么你要经历MemberDeclarationSyntax
的额外箍:cls.DescendantNodes().OfType<FieldDeclarationSyntax>()
应该工作得很好,因为你仍然要穿越树反正。
之后,FieldDeclarationSyntax.Declaration
拥有您感兴趣的内容:VariableDeclarationSyntax
。