public static Rover TryToExecuteSequenceOfCommands(this Rover rover, string commands) { var listOfCommands = commands.ToCharArray().ToList(); foreach (var item in listOfCommands) { if (rover.WantedState.Equals(rover.CurrentState)) { rover.WantedState = rover.CommandsFactory.TryCreate(item).Execute(rover.CurrentState); rover.TryToChangeState(rover.WantedState); } } return(rover); }