protected override Expression VisitParameter(ParameterExpression node) { object argument; if (parameterMappings.TryGetValue(node.Name, out argument)) { if (ReflectionHelper.IsInstanceOf(node.Type, argument)) { return(Expression.Constant(argument)); } else if (argument is Expression) { return((Expression)argument); } else { var notifyValueType = typeof(INotifyValue <>).MakeGenericType(node.Type); if (ReflectionHelper.IsInstanceOf(notifyValueType, argument)) { throw new NotImplementedException(); } throw new InvalidOperationException(string.Format("The provided value {0} for parameter {1} is not valid.", argument, node.Type)); } } else { return(node); } }
protected override Expression VisitParameter(ParameterExpression node) { object argument; if (parameterMappings.TryGetValue(node.Name, out argument)) { if (ReflectionHelper.IsInstanceOf(node.Type, argument)) { return(Expression.Constant(argument, node.Type)); } else { INotifyExpression expression = argument as INotifyExpression; if (expression != null && expression.IsConstant) { return(Expression.Constant(expression.ValueObject, node.Type)); } else { var notifyValueType = typeof(INotifyValue <>).MakeGenericType(node.Type); return(Expression.MakeMemberAccess(Expression.Constant(argument, notifyValueType), ReflectionHelper.GetProperty(notifyValueType, "Value"))); } } } else { return(node); } }
protected override Expression VisitParameter(ParameterExpression node) { object value; if (parameters.TryGetValue(node.Name, out value)) { if (ReflectionHelper.IsInstanceOf(node.Type, value) || value == null) { var createType = typeof(ObservableConstant <>).MakeGenericType(node.Type); return((Expression)(ReflectionHelper.GetConstructor(createType).Invoke(new object[] { value }))); } else { var expression = value as Expression; if (expression != null) { return(expression); } else { throw new InvalidOperationException(string.Format("The provided value {0} for parameter {1} is not valid.", value, node.Type)); } } } else { var createType = typeof(ObservableParameter <>).MakeGenericType(node.Type); return((Expression)(ReflectionHelper.GetConstructor(createType).Invoke(new object[] { node.Name }))); } }
protected override bool GetValue() { if (!ExactMatch) { return(Inner.Value == null || ReflectionHelper.IsInstanceOf(TypeOperand, Inner.Value)); } else { return(Inner.Value == null || Inner.Value.GetType() == TypeOperand); } }