Проблема в переменной model
private Bookings model;
Хотя модель классов реализует IEnumerable<Booking>
, она не является (родителем) того же класса объекта, возвращаемого repository.GetBookings()
.
Сравните это с:
class Person {...}
class Male : Person {...}
class Female : Person {...}
Person p = new Male();
Female f = p;
Вы не можете просто присвоить объект объекту несвязанного класса.
Вам нужно написать конвертер, который преобразует любую последовательностьБронирования в объект класса Бронирования.Самый простой способ - добавить конструктор:
public Bookings(IEnumerable<Booking> bookings)
{
this.bookingList = bookings.ToList();
}
Примечание: bookingList - это новый список, содержащий те же элементы, что и бронирования.Если вы добавляете бронирование в исходный список, оно не добавляется к вашему объекту Bookings
и наоборот.
Другие возможные улучшения: очевидно, вы планируете хранить свои заказы внутри списка.Почему бы не реализовать IList<Booking>
.С очень небольшим усилием вы добавляете много функций
class Bookings : IList<Booking>, IReadonlyList<Booking>, IReadonlyCollection<Booking>
{
public Bookings()
{
this.bookings = new List<Booking>();
}
public Bookings(IEnumerable<Booking> bookings)
{
this.bookings = bookings.ToList();
}
private readonly IList<Booking> bookings;
public int Count => this.booking.Count;
public void Add(Booking booking) {this.booking.Add(booking);}
public void Remove(Booking booking) {this.booking.Remove(booking);}
public IEnumerator<Booking> GetEnumerator() {return this.booking.GetEnumerator();}
etc.
}
Примечание. Если в Visual Studio щелкнуть правой кнопкой мыши на IList<Bookin>
и выбрать «Быстрые действия и рефакторинг», все функции будут реализованы одновременно.,Можно даже сказать, что все эти функции должны использовать this.booking
.