Roslyn是否内置了“简化”?

时间:2012-07-15 17:44:02

标签: c# roslyn

是否有任何内置方法可以使用Roslyn执行与C#编译器相同的编译时转换,例如:用于将迭代器,初始化器,lambdas,LINQ等转换为基本的C#代码?

2 个答案:

答案 0 :(得分:5)

Roslyn编译器API旨在(除了将源代码转换为IL)之外,还可以构建源代码分析和转换工具。

但是,lambda和迭代器没有始终使用source指定的转换。它们使用内部绑定节点抽象建模,其中包括只能使用IL表示的其他编译器特定规则。

将LINQ转换为C#中的源代码是可能的,因为它被指定为源代码转换(编译器是否实际上是这样做的。)然而,没有编译器API专门执行此操作。如果有,它可能会显示为服务层API而不是编译器API。

答案 1 :(得分:3)

AFAIK,不,罗斯林没有暴露这样的东西。但编译器必须以某种方式进行这些转换,因此您可以通过访问某些internal方法来实现此目的。

当然,您可以使用Roslyn自己进行这些转换,但这不是您所要求的。