public abstract class ExpressionVisitor {
protected virtual Expression VisitMethodCall(MethodCallExpression m) {
Expression obj = this.Visit(m.Object);
IEnumerable<Expression> args =
			this.VisitExpressionList(m.Arguments);
if (obj != m.Object || args != m.Arguments) {
	return Expression.Call(obj, m.Method, args);
}
return m;
}
protected virtual Expression VisitInvocation(InvocationExpression iv) {
IEnumerable<Expression> args =
			this.VisitExpressionList(iv.Arguments);
Expression expr = this.Visit(iv.Expression);
if (args != iv.Arguments || expr != iv.Expression) {
	return Expression.Invoke(expr, args);
}
return iv;
}
// zbytek kdu vynechn ...
}
