从 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.
我们的目标是使用 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.