是否有任何内置方法可以使用Roslyn执行与C#编译器相同的编译时转换,例如:用于将迭代器,初始化器,lambdas,LINQ等转换为基本的C#代码?
答案 0 :(得分:5)
Roslyn编译器API旨在(除了将源代码转换为IL)之外,还可以构建源代码分析和转换工具。
但是,lambda和迭代器没有始终使用source指定的转换。它们使用内部绑定节点抽象建模,其中包括只能使用IL表示的其他编译器特定规则。
将LINQ转换为C#中的源代码是可能的,因为它被指定为源代码转换(编译器是否实际上是这样做的。)然而,没有编译器API专门执行此操作。如果有,它可能会显示为服务层API而不是编译器API。
答案 1 :(得分:3)
AFAIK,不,罗斯林没有暴露这样的东西。但编译器必须以某种方式进行这些转换,因此您可以通过访问某些internal
方法来实现此目的。
当然,您可以使用Roslyn自己进行这些转换,但这不是您所要求的。