это позволит вам иметь только один цикл, но это не очень
foreach (object publication in pubs)
{
var book = publication as Book;
var magazine = publication as Magazine;
if (book != null) {
//it's a book, do your thing
} else if (magazine != null) {
//it's a magazine, do your thing
} else {
throw new InvalidOperationException(publication.GetType().Name + " is not a book or magazine: ");
}
}
Вместо наследования вы действительно хотите определить интерфейс, который включает в себя общие свойства и методы всех публикаций.
public interface IPublication
{
string Title {get;set;}
float Price {get;set;}
// etc.
}
Затем ваши классы реализуют интерфейс
public class Book : IPublication
{
public string Title {get;set;}
public float Price {get;set;}
//the rest of the book implementation
}
public class Magazine: IPublication
{
public string Title {get;set;}
public float Price {get;set;}
//the rest of the magazine implementation
}
. Теперь у вас намного больше гибкости, но для ваших целей вы можете оставить оставшуюся часть кода без изменений.и используйте только один цикл, который намного чище и более встроен в решение jwJung
foreach (var publication in pubs.OfType<IPublication>())
{
// publication is either a book or magazine, we don't care we are just interested in the common properties
Console.WriteLine("{0} costs {1}", publication.Title, publication.Price);
}