private MemberAssignment BindProperty(PropertyInfo prop, Expression exp) { var targetType = prop.PropertyType; if (targetType.GetNoneNullableType().IsValueType) { var type = TypeImplicitConvert.StandardImplicit(targetType, exp.Type); if (type != null && targetType != type) { exp = Expression.Convert(exp, type); } } return(Expression.Bind(prop, exp)); }
/// <summary> /// 隐式转换 /// </summary> /// <param name="left">左表达式结果</param> /// <param name="right">右表达式结果</param> private void ImplicitConvert(ref ReadResult left, ref ReadResult right) { if (left.Expression.Type != right.Expression.Type) { var type = TypeImplicitConvert.StandardImplicit(left.Expression.Type, right.Expression.Type); if (type != null) { if (left.Expression.Type != type) { left.Expression = Expression.Convert(left.Expression, type); } if (right.Expression.Type != type) { right.Expression = Expression.Convert(right.Expression, type); } } } }