public static void ForSubtreePreorder(
     this Expression exp,
     Expression parent,
     ExpressionExtensions.ExpressionAction action)
 {
     action(exp, parent);
     foreach (Expression child in exp.GetChildren())
     {
         child.ForSubtreePreorder(exp, action);
     }
 }
 public static void ForSubtreePreorder(
     this Expression exp,
     ExpressionExtensions.ExpressionAction action)
 {
     exp.ForSubtreePreorder((Expression)null, action);
 }