Первое, на что я посмотрю, это полиморфизм; вместо этого я могу использовать виртуальный метод, и item.DoSomething()
?
Следующая вещь, на которую я бы посмотрел, была бы дискриминацией по перечислению, т.е.
switch(item.ItemType) {
case ItemType.Foo: ...
case ItemType.Bar: ...
}
(и добавить дискриминатор к общему интерфейсу / базовому классу)
Если типы могут быть что угодно , то у 4.0 есть хитрость; если вы вызываете te метод одинаково для каждой перегрузки, вы можете заставить dynamic
беспокоиться о его выборе:
dynamic x = item;
DoSomething(x);