/// <summary> /// The visit unary. /// </summary> /// <param name="node"> /// The node. /// </param> /// <returns> /// The <see cref="Expression"/>. /// </returns> protected override Expression VisitUnary(UnaryExpression node) { var result = base.VisitUnary(node); node = result as UnaryExpression; return(node?.Operand is ConstantExpression?Simplifier.Evaluate(node) : result); }
/// <summary> /// The visit conditional. /// </summary> /// <param name="node"> /// The node. /// </param> /// <returns> /// The <see cref="Expression"/>. /// </returns> protected override Expression VisitConditional(ConditionalExpression node) { var result = base.VisitConditional(node); node = result as ConditionalExpression; return(node?.Test is ConstantExpression && node.IfTrue is ConstantExpression && node.IfFalse is ConstantExpression?Simplifier.Evaluate(node) : result); }
/// <summary> /// The visit member. /// </summary> /// <param name="node"> /// The node. /// </param> /// <returns> /// The <see cref="Expression"/>. /// </returns> protected override Expression VisitMember(MemberExpression node) { var result = base.VisitMember(node); node = result as MemberExpression; return(node != null && (node.Expression == null || node.Expression is ConstantExpression) ? Simplifier.Evaluate(node) : result); }
/// <summary> /// The visit index. /// </summary> /// <param name="node"> /// The node. /// </param> /// <returns> /// The <see cref="Expression"/>. /// </returns> protected override Expression VisitIndex(IndexExpression node) { var result = base.VisitIndex(node); node = result as IndexExpression; return(node != null && (node.Object == null || node.Object is ConstantExpression) && node.Arguments.All(arg => arg is ConstantExpression) ? Simplifier.Evaluate(node) : result); }