Ok, il punto è: come vuoi poi utilizzare "y" del tuo esempio? se non conosci a priori cosa chiamare di y perché non è noto in compilazione, allora giustamente non ti serve fare poi il cast senza conoscere che fare con quell'oggetto... Mi potresti rispondere (suppongo... ma è questo quello su cui mi sembra che sia reticente) che tutte le classi hanno una proprietà "ID" di tipo int, in questo caso qualsiasi classe creata a partire da una tabella avrà la proprietà ID, quindi tu da "y" vuoi ricavare l'ID (a prescindere dal tipo, che sia Articoli oppure Ordini). In questo caso ci sarebbe una spiegazione, ma il modo migliore di ottenerlo è diverso da quello che stai pensando tu, ovvero si dovrebbe creare una classe base la quale andrebbero ad ereditare tutte le entità (tabelle), e tu fai il cast alla classe base. Puoi anche utilizzare le interfacce al posto di classi base, in questo modo potrai lavorare con più "derivazioni" o se ad esempio le classi già ereditano da altre classi. In ogni caso a quel punto il cast lo fai sulla classe base o sull'interfaccia e non sul tipo derivato, in quanto il tipo derivato lo dovresti conoscere in compilazione per poter fare il cast come intendi farlo tu. Da li nasce poi tutto il resto, tra cui anche sfruttare la reflection, ma soprattutto i Generics.


Rispondi quotando