Vediamo se riesco a rompere questo incantesimo che mi porto dietro da 6 mesi....
Ho un hashtable MyHash[] in cui inserisco TOT oggetti con key "A", "B", "C" .... tutti di tipo T0, oggetti che espongono una proprietà P.
Per ogni tipo ho una stringa che contiene il "nome" esteso di quel tipo: ad es.

string T1Type = "namespace_del_progetto.T1"

Nel corso del run-time al massimo 1 solo oggetto per volta può cambiare tipo, e precisamente:

"A" può diventare T1
"B" T2
"C" T3 ecc.

"This" è una stringa inizialmente vuota ("") che eventualmente riceve - nel run-time - la key dell'(unico) oggetto che cambia tipo. Quindi se "A" si trasforma da T0 a T1 allora This="A".
Se in un certo momento del run-time gli oggetti sono di nuovo tutti di tipo T0 allora This torna ad essere "".
Quando un oggetto cambia tipo, mi serve conoscere il valore della sua proprietà P.
Io non ho saputo fare di meglio che scrivere questa tiritera:

codice:
if (This != "") 
{
     if (MyHash[This].GetType().ToString() == T1Type)
     {
         T1 x = (T1)MyHash[This];
         --> x.P
     }
     else if (MyHash[This].GetType().ToString() == T2Type)
     {
         T2 x = (T2)MyHash[This];
         --> x.P
     }
     else if (MyHash[This].GetType().ToString() == T3Type)
     {
         T3 x = (T3)MyHash[This];
         --> x.P
     }
 
     ................
e se i tipi sono T1, T2, ..., T100 devo scrivere 100 "If"!

Esiste un modo per utilizzare un solo "If" magari dentro qualche ciclo diabolico?

Grazie.