如何使用Roslyn(Microsoft CodeAnalysis)获取范围内的所有可见局部变量名称

g.p*_*dou 4 c# roslyn

(请注意:这不是关于运行时反射/ metainfo)

我正在编写Roslyn CSharpSyntaxVisitor的具体实现

实现VisitIdentifierName时

public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax name)
{
   var symbolInfo = _semanticModel.GetSymbolInfo(name);
   var fieldSymbol = symbolInfo.Symbol as IFieldSymbol;
   if (fieldSymbol != null)
   {
       // Here I would like to get all the local variable names what are visible
       // in the very same scope where this field IdentifierNameSyntax under visiting resides
       // We can suppose that _semanticNodel for the Document is available.
   }
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 9

调用SemanticModel.LookupSymbols(),然后过滤局部变量.

您可能还想过滤掉在该位置之后声明的本地人; 看到这段代码.

  • 是的,但它可能会减少他们重新过滤当地人的代码 - 之后的东西. (2认同)