title: property keeps throwing an ArgumentOutOfRangeExpection
body: <p>My code keeps getting stuck whenever I continue after the first pause before changes are made. I can't figure out what else is the problem due to the fact I can't get past this, I have tried debugging but every change I make only seems to make the code not run. What is supposed to happen is after the original library books data are printed, I am supposed to check 3 out to patrons that I have made and other minor changes, then lastly the data is supposed to revert back to the original.</p>
  
  <pre><code>public static void Main(string[] args)
  {
      LibraryPatron patron1 = new LibraryPatron("John", "A123");
      LibraryPatron patron2 = new LibraryPatron("Wick", "A122");
      LibraryPatron patron3 = new LibraryPatron("Smith", "A121");
  
      LibraryPatron[] x = { patron1, patron2, patron3 };
  
      LibraryBook book1 = new LibraryBook("The Wright Guide to C#", "Andrew Wright", "UofL Press",
          2011, "ZZ25 3G");  // 1st test book
      LibraryBook book2 = new LibraryBook("Harriet Pooter", "IP Thief", "Stealer Books",
          2001, "AG773 ZF"); // 2nd test book
      LibraryBook book3 = new LibraryBook("The Color Mauve", "Mary Smith", "Beautiful Books Ltd.",
          1986, "JJ438 4T"); // 3rd test book
      LibraryBook book4 = new LibraryBook("The Guan Guide to SQL", "Jeff Guan", "UofL Press",
          2019, "ZZ24 4F");  // 4th test book
      LibraryBook book5 = new LibraryBook("The Big Book of Doughnuts", "Homer Simpson", "Doh Books",
          2004, "AE842 7A"); // 5th test book
  
      LibraryBook[] theBooks = { book1, book2, book3, book4, book5 }; // Test array of books
  
  
      WriteLine("Original list of books");
      WriteLine("----------------------");
      PrintBooks(theBooks);
      Pause();
  
      // Make changes
      book1.CheckOut(patron1);
      book2.Publisher = "Borrowed Books";
      book3.CheckOut(patron2);
      book4.CallNumber = "AB123 4A";
      book5.CheckOut(patron3);
      book5.CopyrightYear = -1234; // Attempt invalid year
  
      WriteLine("After changes");
      WriteLine("-------------");
      PrintBooks(theBooks);
      Pause();
  
      // Return the books
      book1.ReturnToShelf();
      book3.ReturnToShelf();
      book5.ReturnToShelf();
  
      WriteLine("After returning the books");
      WriteLine("-------------------------");
      PrintBooks(theBooks);
  }
  
  // Precondition:  None
  // Postcondition: The books have been printed to the console
  public static void PrintBooks(LibraryBook[] books)
  {
      foreach (LibraryBook b in books)
      {
          WriteLine(b);
          WriteLine();
      }
  }
  
  // Precondition:  None
  // Postcondition: Pauses program execution until user presses Enter and
  //                then clears the screen
  public static void Pause()
  {
      WriteLine("Press Enter to Continue...");
      ReadLine();
  
      Clear(); // Clear screen
  }
  
  public class LibraryBook
  </code></pre>
  
  <p>{</p>
  
  <pre><code>public readonly int DEFAULT_YEAR = DateTime.Now.Year; // Default copyright year is current year
  
  private string _title;      // The book's title
  private string _author;     // The book's author
  private string _publisher;  // The book's publisher
  private int _copyrightYear; // The book's year of copyright
  private string _callNumber; // The book's call number in the library
  private bool _checkedOut;   // The book's checked out status
  public  static LibraryPatron Patron { get; private set; }
  
  // Precondition:  theCopyrightYear &gt;= 0
  // Postcondition: The library book has been initialized with the specified
  //                values for title, author, publisher, copyright year, and
  //                call number. The book is not checked out.
  public LibraryBook(String theTitle, String theAuthor, String thePublisher,
      int theCopyrightYear, String theCallNumber)
  {
      Title = theTitle;
      Author = theAuthor;
      Publisher = thePublisher;
      CopyrightYear = theCopyrightYear;
      CallNumber = theCallNumber;
  
      ReturnToShelf(); // Make sure book is not checked out
  }
  
  public string Title
  {
      // Precondition:  None
      // Postcondition: The title has been returned
      get
      {
          return _title;
      }
  
      // Precondition:  None
      // Postcondition: The title has been set to the specified value
      set
      {
          if (!string.IsNullOrWhiteSpace(_title))
          {
              throw new ArgumentOutOfRangeException($"{nameof(Title)} must not be null or empty values.");
          }
          _title = value.Trim();
      }
  }
  
  public string Author
  {
      // Precondition:  None
      // Postcondition: The author has been returned
      get
      {
          return _author;
      }
  
      // Precondition:  None
      // Postcondition: The author has been set to the specified value
      set
      {
          _author = value;
      }
  }
  
  public string Publisher
  {
      // Precondition:  None
      // Postcondition: The publisher has been returned
      get
      {
          return _publisher;
      }
  
      // Precondition:  None
      // Postcondition: The publisher has been set to the specified value
      set
      {
          _publisher = value;
      }
  }
  
  public int CopyrightYear
  {
      // Precondition:  None
      // Postcondition: The copyright year has been returned
      get
      {
          return _copyrightYear;
      }
  
      // Precondition:  value &gt;= 0
      // Postcondition: The copyright year has been set to the specified value
      set
      {
          if (value &gt;= 0)
              _copyrightYear = value;
          else
              throw new ArgumentOutOfRangeException($"{nameof(CopyrightYear)} must be &gt;= 0.");
      }
  }
  
  public string CallNumber
  {
      // Precondition:  None
      // Postcondition: The call number has been returned
      get
      {
          return _callNumber;
      }
  
      // Precondition:  None
      // Postcondition: The call number has been set to the specified value
      set
      {
          if (!string.IsNullOrWhiteSpace(_callNumber))
          {
              throw new ArgumentOutOfRangeException($"{nameof(CallNumber)} must not be null or empty values.");
          }
          _callNumber = value.Trim();
      }
  }
  
  // Precondition:  None
  // Postcondition: The book is checked out
  public void CheckOut(LibraryPatron x)
  {
      _checkedOut = true;
      x = Patron;
  }
  
  // Precondition:  None
  // Postcondition: The book is not checked out
  public void ReturnToShelf()
  {
      _checkedOut = false;
      Patron = null;
  }
  
  // Precondition:  None
  // Postcondition: true is returned if the book is checked out,
  //                otherwise false is returned
  public bool IsCheckedOut()
  {
      return _checkedOut;
  }
  
  // Precondition:  None
  // Postcondition: A string is returned representing the libary book's
  //                data on separate lines
  public override string ToString()
  {
      string NL = Environment.NewLine; // Newline shortcut
  
      return $"Title: {Title}{NL}Author: {Author}{NL}Publisher: {Publisher}{NL}" +
          $"Copyright: {CopyrightYear}{NL}Call Number: {CallNumber}{NL}" +
          $"{(_checkedOut == true ? "Check Out By: {Patron}" : "Not Checked Out" )}";
  }
  public class LibraryPatron
  </code></pre>
  
  <p>{</p>
  
  <pre><code>private string _patronName; // Name of the patron
  private string _patronID;   // ID of the patron
  
  // Precondition:  None
  // Postcondition: The patron has been initialized with the specified name
  //                and ID
  public LibraryPatron(string name, string id)
  {
      PatronName = name;
      PatronID = id;
  }
  
  public string PatronName
  {
      // Precondition:  None
      // Postcondition: The patron's name has been returned
      get
      {
          return _patronName;
      }
  
      // Precondition:  None
      // Postcondition: The patron's name has been set to the specified value
      set
      {
          if (!string.IsNullOrWhiteSpace(_patronName))
          {
              throw new ArgumentOutOfRangeException($"{nameof(PatronName)} must not be null or empty values.");
          }
          _patronName = value.Trim();
      }
  }
  
  public string PatronID
  {
      // Precondition:  None
      // Postcondition: The patron's ID has been returned
      get
      {
          return _patronID;
      }
  
      // Precondition:  None
      // Postcondition: The patron's ID has been set to the specified value
      set
      {
          if (!string.IsNullOrWhiteSpace(_patronID))
          {
              throw new ArgumentOutOfRangeException($"{nameof(PatronID)} must not be null or empty values.");
          }
          _patronID = value.Trim();
      }
  }
  
  // Precondition:  None
  // Postcondition: A string is returned presenting the libary patron's data on
  //                separate lines
  public override string ToString()
  {
      string NL = Environment.NewLine; // NewLine shortcut
  
      return $"Name: {PatronName}{NL}ID: {PatronID}";
  }
  </code></pre>
  
  <p>}</p>