C# 如何在CompilationUnit中查找方法符号的SyntaxNode?
我已经向编译单元添加了一组节点,现在我想查找与给定符号对应的语法节点:C# 如何在CompilationUnit中查找方法符号的SyntaxNode?,c#,roslyn,C#,Roslyn,我已经向编译单元添加了一组节点,现在我想查找与给定符号对应的语法节点: var compilation = Compilation.Create("HelloWorld") .AddSyntaxTrees(SyntaxTree.ParseCompilationUnit("<some namespace>")); ISymbol symbol = // some arbitrary symbol, e.g. a method whos
var compilation = Compilation.Create("HelloWorld")
.AddSyntaxTrees(SyntaxTree.ParseCompilationUnit("<some namespace>"));
ISymbol symbol = // some arbitrary symbol, e.g. a method whose syntax node I had
compilation.GlobalNamespace.GetNamespaceMembers().First();
SyntaxToken token = ???; // how do I get the token for that symbol?
var compilation=compilation.Create(“HelloWorld”)
.AddSyntaxTrees(SyntaxTree.ParseCompilationUnit(“”);
ISymbol symbol=//一些任意符号,例如,一个方法的语法节点
compilation.GlobalNamespace.GetNamespaceMembers().First();
SyntaxToken标记=???;//我如何获得该符号的令牌?
我如何获得该符号的令牌
注:
我的目标是能够从中获得每个方法的方法体
MethodSymbol
使用ISymbol.DeclaringSyntaxReferences
我认为您不需要一个SyntaxToken
,它代表语法树中最小的单元,比如标识符。我想你更喜欢像MethodDeclarationSyntax
,对吧?嗯,FindToken
次线性时间吗?因为我希望对每个符号都这样做。FindToken
应该是大致对数的-在有几个子节点的节点中,它使用基于位置的二进制搜索来查找标记。实际上,这不起作用-没有名为祖先的方法。我想你指的是Parent.FirstAncestorOrSelf
?顺便说一句,凯文:我没有注意到DeclaringSyntaxNodes
属性,我有6月份的CTP(我想那是CTP2?)。你确定它在里面吗?是的,家长。我的意思是“第一个”或“第二个”。(在内部,我们在SyntaxToken
上有一个扩展方法)。关于DeclaringSyntaxNodes
,它是从6月份的CTP开始添加的,因此您必须等待下一个使用它。