Часто, когда вам нужно проверить тип объекта, это может быть признаком того, что с вашим дизайном что-то не так.Объектно-ориентированное программирование дает нам возможность избегать такого рода конструкций с помощью полиморфизма.
Разве не было бы лучше, если бы A, B и C реализовали тела ваших предложенных if-операторов в интерфейсе базового класса, чтобы вам не приходилось тестировать исходный код?
Например,:
abstract class A
{
public virtual void SomeBehavior()
{
Console.WriteLine("default behavior");
}
}
class B:A
{
public override void SomeBehavior()
{
Console.WriteLine("type specific behavior");
}
}
class C:A
{
public override void SomeBehavior()
{
Console.WriteLine("different behavior");
}
}
class D:A{}
void Main()
{
IEnumerable<A> myCollection=new A[]{new B(),new C(),new D()};
foreach(A item in myCollection)
{
item.SomeBehavior();
}
}