最佳答案
我一直在研究 罗斯林 CTP,虽然它解决了与 表达式树 API类似的问题,但两者都是不可改变的,但是罗斯林以一种完全不同的方式解决了这个问题:
Expression
节点没有对父节点的引用,而是使用 ExpressionVisitor
进行修改,这就是为什么可以重用大部分的原因。
Roslyn's SyntaxNode
, on the other side, has a reference to its parent, so all the nodes effectively become a block that's impossible to re-use. Methods like Update
, ReplaceNode
, etc, are provided to make modifications.
什么时候是个头?Document
?Project
?ISolution
?API 促进了树的一步一步的改变(而不是一个按钮) ,但是每一步都是一个完整的副本吗?
他们为什么做出这样的选择? 我是不是漏掉了什么有趣的把戏?