private static BinaryExpression GetUserDefinedAssignOperatorOrThrow(ExpressionType binaryType, string name, Expression left, Expression right, LambdaExpression conversion, bool liftToNull) { BinaryExpression b = GetUserDefinedBinaryOperatorOrThrow(binaryType, name, left, right, liftToNull); if (conversion == null) { // return type must be assignable back to the left type if (!TypeUtils.AreReferenceAssignable(left.Type, b.Type)) { throw Error.UserDefinedOpMustHaveValidReturnType(binaryType, b.Method.Name); } } else { // add the conversion to the result ValidateOpAssignConversionLambda(conversion, b.Left, b.Method, b.NodeType); b = new OpAssignMethodConversionBinaryExpression(b.NodeType, b.Left, b.Right, b.Left.Type, b.Method, conversion); } return b; }