2016-08-19 6 views
0

У меня есть следующий цикл (ы). Этот цикл проходит через коллекцию книг и выполняет некоторые логические проверки относительно дат регистрации и регистрации. Затем он возвращает новый объект. Он также переносит названия книгОтслеживание счетчиков в вложенных циклах

Работает ОК до тех пор, пока не дойдет до конца коллекции. Тогда мои счетчики, похоже, выходят из синхронизации и превращаются в бесконечный цикл. Я пробовал разные разрешения, но я просто не могу заставить его работать правильно.

Может ли кто-нибудь увидеть это, если это имеет смысл, или если я что-то делаю неправильно?

Спасибо!

private static readonly TimeSpan gracePeriodTimeSpan = TimeSpan.Parse("23:00"); 

     //current posistion in books collection 
     currentPos = pos % books.Count; 

     //posistion to stop at 
     var stopPos = books.Count; 

     do 
     { 
      //start is current posistion 
      var startPos = pos; 

      //assign the next posistion 
      var nextPos = (pos + 1) % books.Count; 
      bookTitle = bookTitle + ";" + books[pos].Title; 

      //loop until we hit the stop posistion - check book CheckInDate/CheckOutDate proximity 
      while ((nextPos != stopPos || nextPos !=0) && books[pos].CheckInDate + gracePeriodTimeSpan >= books[nextPos].CheckOutDate) 
      {     
       pos = nextPos; 
       nextPos = (pos + 1) % books.Count; 
      } 
      bookTitle = bookTitle + ";" + books[pos].Title; 

      //return new book checkout object 
      yield return 
       CreateNewBookCheckout(bookTitle, books[pos], books[startPos].CheckOutDate, 
        books[pos].CheckInDate); 

      bookTitle = ""; 
      pos = nextPos; 

      //keep going til we hit the stop posistion 
     } while (pos != stopPos); 

ответ

1

Только быстрое наблюдение:

Ваш pos меняется на nextPos, который (pos + 1) % books.Count. Эта операция всегда будет возвращать значения между [0 and books.Count - 1], а ваш stopPos = books.Count, который делает бесконечный цикл.

Может быть, вам нужно переключить stopPos быть последняя книга, которая books.Count-1

+0

Спасибо. Это фиксирует счетчики до конца. Это заставляет цикл пропускать самую последнюю книгу в коллекции. – SkyeBoniwell

 Смежные вопросы

  • Нет связанных вопросов^_^