public virtual void Visit(Expression e)
{
if (e == null) return;
switch (e.NodeType)
{
case ExpressionType.Negate:
case ExpressionType.NegateChecked:
case ExpressionType.Not:
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
case ExpressionType.Decrement:
case ExpressionType.Increment:
case ExpressionType.OnesComplement:
case ExpressionType.ArrayLength:
case ExpressionType.Quote:
case ExpressionType.TypeAs:
case ExpressionType.UnaryPlus:
case ExpressionType.Unbox:
{
VisitUnary((UnaryExpression)e);
break;
}
case ExpressionType.Add:
case ExpressionType.AddChecked:
case ExpressionType.Subtract:
case ExpressionType.SubtractChecked:
case ExpressionType.Multiply:
case ExpressionType.MultiplyChecked:
case ExpressionType.Divide:
case ExpressionType.Modulo:
case ExpressionType.And:
case ExpressionType.AndAlso:
case ExpressionType.Or:
case ExpressionType.OrElse:
case ExpressionType.LessThan:
case ExpressionType.LessThanOrEqual:
case ExpressionType.GreaterThan:
case ExpressionType.GreaterThanOrEqual:
case ExpressionType.Equal:
case ExpressionType.NotEqual:
case ExpressionType.Coalesce:
case ExpressionType.ArrayIndex:
case ExpressionType.RightShift:
case ExpressionType.LeftShift:
case ExpressionType.ExclusiveOr:
{
VisitBinary((BinaryExpression)e);
break;
}
case ExpressionType.TypeIs:
{
VisitTypeIs((TypeBinaryExpression)e);
break;
}
case ExpressionType.Conditional:
{
VisitConditional((ConditionalExpression)e);
break;
}
case ExpressionType.Constant:
{
VisitConstant((ConstantExpression)e);
break;
}
case ExpressionType.Parameter:
{
VisitParameter((ParameterExpression)e);
break;
}
case ExpressionType.MemberAccess:
{
VisitMemberAccess((MemberExpression)e);
break;
}
case ExpressionType.Call:
{
VisitMethodCall((MethodCallExpression)e);
break;
}
case ExpressionType.Lambda:
{
VisitLambda((LambdaExpression)e);
break;
}
case ExpressionType.New:
{
VisitNew((NewExpression)e);
break;
}
case ExpressionType.NewArrayInit:
case ExpressionType.NewArrayBounds:
{
VisitNewArray((NewArrayExpression)e);
break;
}
case ExpressionType.Invoke:
{
VisitInvocation((InvocationExpression)e);
break;
}
case ExpressionType.MemberInit:
{
VisitMemberInit((MemberInitExpression)e);
break;
}
case ExpressionType.ListInit:
{
VisitListInit((ListInitExpression)e);
break;
}
default:
{
throw new NotSupportedException(string.Format("Unknown expression type: '{0}'", e.NodeType));
}
}
}