Абсолютно никаких проблем, наоборот, вы все делаете правильно, используя ООП.
Сначала вы используете полиморфизм в одном из своих основных назначений для анализа списка объектов разных типов, имеющих одинаковый базовый тип, и вызываететот же метод.
Затем вы используете сопоставление типов, чтобы применить особый случай к неспецифическому списку объектов разных типов, имеющих один и тот же базовый тип, чтобы воздействовать только на те, которые являются определенным дочерним типом.
Это два элементарных примера.
Вы ничего не нарушаете.
Например, в реальном мире мойка автомобиля:
Одной и той же способом будет мыть внешнюю часть автомобилей разных типов: машины будут проходить одну за другой и применять один и тот же метод к каждой, это ваш первый цикл - он не имеет никакого отношения к типу автомобилей, поскольку ониавтомобили.
Тогда, скажем, его цель - наклеить ярлык только на автомобили с двумя дверьми, а не с четырьмя, это ваша вторая петля - он тзаботится о типе автомобиля, чтобы применить что-то только к определенному полу.
ООП существует, чтобы представлять реальность и использовать это представление наиболее естественным, простым, эффективным и надежным способомвозможно ... так что будь умным.
Следовательно, ты можешь написать это:
objects.OfType<DerivedTypeA>().ToList().ForEach(o => o.TypeASpecificMethod());
И ты будешь крепким.