Mi sà che c'è un problema di progettazione di fondo, non è che forse è meglio fare una refattorizzazione di quegli oggetti in modo magari che discendano da una comune classe o interfaccia.
Questo perchè anche se con la reflection è possibile evitare di effetturare i cast ma cmq devi sapere la firma dei metodi che devi invocare quindi gli "if" ne useresti molto di più.