Проблема в том, что List<IPublication>
- это то, что может содержать любой класс, который наследуется от IPublication
.Поскольку компилятор не знает, что вы не будете пытаться поместить Magazine
в результат GetBooks()
, вы должны написать свою функцию следующим образом:
public List<IPublication> GetBooks()
{
List<IPublication> books = new List<IPublication>();
// put only books in here
return books;
}
Если ваша функция возвращаетнеизменяемый список, к которому нет доступа по индексу (и вы находитесь на C # 4), вы можете написать его так:
public IEnumerable<IPublication> GetBooks()
{
List<Book> books = new List<Book>();
return books;
}
Если вы можете вернуть IEnumerable<T>
, но выиспользуя C # 3, вы можете делать то, что предлагает cdhowie:
public IEnumerable<IPublication> GetBooks()
{
List<Book> books = new List<Book>();
return books.Cast<IPublication>();
}
Если вы используете C # 2, лучше просто использовать первый предложенный мной метод.