Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetMethodBasedBinaryOperator()

static BinaryExpression System.Linq.Expressions.Expression< TDelegate >.GetMethodBasedBinaryOperator ( ExpressionType binaryType,
Expression< TDelegate > left,
Expression< TDelegate > right,
MethodInfo method,
bool liftToNull )
inlinestaticprivateinherited

Definition at line 743 of file Expression.cs.

744 {
746 ParameterInfo[] parametersCached = method.GetParametersCached();
747 if (parametersCached.Length != 2)
748 {
749 throw Error.IncorrectNumberOfMethodCallArguments(method, "method");
750 }
752 {
753 ValidateParamswithOperandsOrThrow(parametersCached[0].ParameterType, left.Type, binaryType, method.Name);
754 ValidateParamswithOperandsOrThrow(parametersCached[1].ParameterType, right.Type, binaryType, method.Name);
755 return new MethodBinaryExpression(binaryType, left, right, method.ReturnType, method);
756 }
757 if (left.Type.IsNullableType() && right.Type.IsNullableType() && ParameterIsAssignable(parametersCached[0], left.Type.GetNonNullableType()) && ParameterIsAssignable(parametersCached[1], right.Type.GetNonNullableType()) && method.ReturnType.IsValueType && !method.ReturnType.IsNullableType())
758 {
759 if (method.ReturnType != typeof(bool) || liftToNull)
760 {
761 return new MethodBinaryExpression(binaryType, left, right, method.ReturnType.GetNullableType(), method);
762 }
763 return new MethodBinaryExpression(binaryType, left, right, typeof(bool), method);
764 }
765 throw Error.OperandTypesDoNotMatchParameters(binaryType, method.Name);
766 }
static void ValidateParamswithOperandsOrThrow(Type paramType, Type operandType, ExpressionType exprType, string name)
static void ValidateOperator(MethodInfo method)
static bool ParameterIsAssignable(ParameterInfo pi, Type argType)

References System.Linq.Expressions.Error.IncorrectNumberOfMethodCallArguments(), System.Linq.Expressions.Error.OperandTypesDoNotMatchParameters(), System.Linq.Expressions.Expression< TDelegate >.ParameterIsAssignable(), System.Linq.Expressions.Expression< TDelegate >.ValidateOperator(), and System.Linq.Expressions.Expression< TDelegate >.ValidateParamswithOperandsOrThrow().

Referenced by System.Linq.Expressions.Expression< TDelegate >.Add(), System.Linq.Expressions.Expression< TDelegate >.AddChecked(), System.Linq.Expressions.Expression< TDelegate >.And(), System.Linq.Expressions.Expression< TDelegate >.Divide(), System.Linq.Expressions.Expression< TDelegate >.Equal(), System.Linq.Expressions.Expression< TDelegate >.ExclusiveOr(), System.Linq.Expressions.Expression< TDelegate >.GetMethodBasedAssignOperator(), System.Linq.Expressions.Expression< TDelegate >.GreaterThan(), System.Linq.Expressions.Expression< TDelegate >.GreaterThanOrEqual(), System.Linq.Expressions.Expression< TDelegate >.LeftShift(), System.Linq.Expressions.Expression< TDelegate >.LessThan(), System.Linq.Expressions.Expression< TDelegate >.LessThanOrEqual(), System.Linq.Expressions.Expression< TDelegate >.Modulo(), System.Linq.Expressions.Expression< TDelegate >.Multiply(), System.Linq.Expressions.Expression< TDelegate >.MultiplyChecked(), System.Linq.Expressions.Expression< TDelegate >.NotEqual(), System.Linq.Expressions.Expression< TDelegate >.Or(), System.Linq.Expressions.Expression< TDelegate >.Power(), System.Linq.Expressions.Expression< TDelegate >.RightShift(), System.Linq.Expressions.Expression< TDelegate >.Subtract(), and System.Linq.Expressions.Expression< TDelegate >.SubtractChecked().