Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在CompilationUnit中查找方法符号的SyntaxNode?_C#_Roslyn - Fatal编程技术网

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开始添加的,因此您必须等待下一个使用它。