从 Roslyn API 中将代码提取为纯字符串

Extracting code as pure string from Roslyn API

我们的目标是使用 Roslyn 为 C# classes 构建玩具抽象语法树。我们只想展示 class 的基本结构,而不是遍历整个 AST。例如(取自 MSDN):

class TimePeriod  
{
  private double seconds;

  public double Hours
  {
      get { return seconds / 3600; }
      set { seconds = value * 3600; }
  }
}

我们只考虑属性Hours;我们只对提取修饰符 (public)、return 类型 (double)、标识符 (Hours) 的标记感兴趣,至于我们想要的两个访问器的主体直接将其提取为String

但是,当我们遍历 roslyn(在屏幕转储中显示)时,当我们获取访问者的正文时,我们没有找到代表整个字符串的字段。实现此目标的正确方法是什么?

最明显的方法是调用 ToString:

Returns the string representation of this node, not including its leading and trailing trivia.

如果你想要前导和尾随的琐事(空格、评论等),有 ToFullString:

Returns full string representation of this node including its leading and trailing trivia.

出于效率目的,您可能还对 WriteTo 方法感兴趣,该方法将 ToFullString 将产生的内容写入 TextWriter,避免了中间字符串分配:

Writes the full text of this node to the specified TextWriter.