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