Являются ли деревья выражений LINQ собственными деревьями?

Являются ли деревья выражений LINQ собственными деревьями, как, например, графы (направленные или нет, википедия не слишком согласна) без циклов? Каков корень дерева выражений из следующего выражения C #?

(string s) => s.Length

Дерево выражения выглядит так, где «->» обозначает имя свойства узла, через который доступен другой узел.

     ->Parameters[0]
 Lambda---------Parameter(string s)
    \               /
     \->Body       /->Expression
      \           /
      Member(Length)

При использовании ExpressionVisitor для посещения LambdaExpression, ParameterExpression посещается дважды. Есть ли способ сделать это использовать ExpressionVisitor для посещения LambdaExpression, чтобы все узлы были посещены ровно один раз и в определенном, хорошо известном порядке (предварительный заказ, порядок, последующий порядок и т. д.)?

27
задан cynic 24 January 2012 в 12:47
поделиться