Approfitto della tua gentile disponibilità e ti descrivo i dettagli, seppure limitati allo scopo. Io ho creato due strutture
public struct Far
{
....
}
public struct Near
{
....
}
L'hashtable che ho creato ospita inizialmente elementi di tipo Far. Nel corso di Update() in un game gli oggetti dell'hashtable sono continuamente rimossi e ricreati cambiando tipo in base a certe condizioni. Un certo elemento da Far diventa Near o viceversa. Nei dettagli, inizialmente io sono lontano da tutti gli ogegtti dei h (che sarebbe il mio hashtable). Dato un oggetto h[k] se mi avvicino troppo a lui succede questo
h.Remove(k)
h.Add(k, new Near(....)
se invece mi allontano troppo
h.Remove(k)
h.Add(k, new Far(....)
Se in Update voglio sapere qualcosa di un oggetto, per esempio dell'oggetto h["A"], in generale in qualsiasi momento non so di che tipo è questo elemento. Per saperlo devo fare
if(h[k].GetType().ToString() == "Far")
{
Far x = (Far)h[k]
....... esploro x
}
else
{
Near x = (Near)h[k]
....... esploro x
}
Quindi x è "chiuso" dentro il blocco (la "scatola") if.... che è "doppia" e per esplorare x devo scrivere due codici identici e questo mi scoccia. Se riesco a "tirare" fuori l'oggetto x posso esplorarlo in Update con un unico codice. Mi occorre l'oggetto x nel flusso principale di Update, praticamente dopo la sua prima parentesi {
protected override void Update(GameTime gametime)
{
x = h["A"]
...... esploro x
Riesco a "tirare fuori" x dalla scatola solo come object, ma con questo tipo perdo tutte le proprietà di x (i suoi campi) che vorrei esplorare, perchè il tipo object non li riconosce. Ne segue che x non può essere nè var nè object. E' un principio di indeterminazione inviolabile?
Ciao e grazie.

Rispondi quotando