9

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

4

2 回答 2

5

Roslyn 编译器 API 旨在(除了将源代码转换为 IL)允许您构建源代码分析和转换工具。

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

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

于 2012-07-16T18:40:41.917 回答
3

AFAIK,不,罗斯林没有这样的事情。但是编译器必须以某种方式进行这些转换,因此您可以通过访问某些internal方法来做到这一点。

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

于 2012-07-15T18:51:13.247 回答