Если возможно, используйте виртуальный метод и полиморфизм - тогда вам не нужно ничего делать - просто позвоните:
obj.SomeVirtualMethod(args);
и позвольте цифре virtual
/ override
и т. Д.что делать.
Если объект находится под вашим контролем, и вы имеете в виду подтипы вашего определенного базового типа, то я бы рассмотрел добавление дискриминатора, то есть свойства enum, которое раскрывает природу базового типат. е.
Foo foo = ...
switch(foo.Actual)
{
case FooType.Alpha: DoSomethingWith((Alpha) foo); break;
case FooType.Beta: DoSomethingElseWith((Beta) foo); break;
...
}
Для примера Framework / BCL этого взгляните на Expression.NodeType.
Для примитивов (long
и т. д.) посмотрите на Type.GetTypeCode()
, который снова учитываетиспользование переключателя.Если это не примитивно, вы можете сделать нечто подобное, предварительно зарегистрировав свои ожидаемые типы в словаре где-нибудь, что позволит вам (снова) переключиться на switch
.