【发布时间】:2012-07-15 17:44:01
【问题描述】:
是否有任何内置方法可以使用 Roslyn 执行与 C# 编译器相同的编译时转换,例如用于将迭代器、初始化器、lambda、LINQ 等转换为基本的 C# 代码?
【问题讨论】:
是否有任何内置方法可以使用 Roslyn 执行与 C# 编译器相同的编译时转换,例如用于将迭代器、初始化器、lambda、LINQ 等转换为基本的 C# 代码?
【问题讨论】:
Roslyn 编译器 API 旨在(除了将源代码转换为 IL)允许您构建源代码分析和转换工具。
但是,lambda 和迭代器没有始终可以使用 source 指定的翻译。它们使用内部绑定节点抽象建模,其中包括只能使用 IL 表示的额外编译器特定规则。
在 C# 中将 LINQ 转换为源代码是可能的,因为它被指定为源代码转换(无论编译器实际上是否这样做)。但是,没有专门执行此操作的编译器 API。如果有,它可能会显示为服务层 API,而不是编译器 API。
【讨论】:
AFAIK,不,Roslyn 中没有这样的事情。但是编译器必须以某种方式进行这些转换,因此您可以通过访问一些 internal 方法来完成此操作。
当然,您可以使用 Roslyn 自己进行这些转换,但这不是您要的。
【讨论】:
LambdaRewriter?)但整个类都是内部的!
BoundNode 这样的东西,这也是内部的。 :(
internal的东西,只是不太方便。