Roslyn 的代码生成 API 是不可变的吗?

Are Roslyn's code generation APIs immutable?

我开始尝试使用 Roslyn 来生成一些代码。我注意到当我在语法对象上调用 .Add... 时,我调用的原始对象没有发生变化。 Roslyn 就是这样设计的吗?有没有办法让它可变?

是的,语法树是不可变的。 Roslyn 团队的一些原创设计讨论是关于不变性的:

https://github.com/KirillOsenkov/Bliki/wiki/Roslyn-Immutable-Trees

有几点是并发性和线程安全性,以及无需实现写时复制之类的功能即可进行重复数据删除。

我不知道有什么方法可以让它们可变。