2011-12-09 14 views
9

È possibile trasmettere un oggetto a un tipo desiderato utilizzando System.Type? come riferimento?Trasmissione tramite System.Type - C#

Avevo una ricerca e il consenso generale era no, anche se speravo che potessero esserci alcuni aiuti introdotti in C# 4.0 che potrebbero aiutarmi.

I.e. il sotto non funzionerà, ma lo pseudocodice è quello che vorrei.

object o = null; 
var t = typeof(string); 
... 
string foo = (t)o; 

Edit: ho bisogno di usare XmlSerializer per ricostruire/deserializzare al tipo memorizzato in t

+0

Che cosa vi aspettate il tipo in fase di compilazione di 'foo' essere? Cosa stai cercando di ottenere davvero? Spiegare l'immagine più grande sarebbe di grande aiuto. –

+0

Se provi a scrivere un esempio di utilizzo, vedrai che la tua domanda non ha senso. – SLaks

+0

Anche per XmlSerializer, non riesco a capire perché è necessario questo cast. Puoi aggiungere un codice che mostri cosa stai cercando di fare, anche se questo codice non funziona? –

risposta

3

Questo non ha senso.

La trasmissione non modifica un oggetto; semplicemente consente di utilizzare l'oggetto come il tipo dato in fase di compilazione.
Se non si conosce il tipo che si sta trasmettendo a in fase di compilazione, il cast è inutile, dal momento che non consente di fare nulla con l'espressione casted.

+0

In realtà può cambiare un oggetto, se implementa un operatore 'esplicito'. –

+0

@KooKiz: non in fase di esecuzione. Ciò avverrà solo se il compilatore sa chiamare l'operatore. – SLaks

1

Non è necessario eseguire il cast. L'oggetto non cambia, il tipo di riferimenti (variabili) cambia quando "casting".

0

Immagino che stiate cercando qualcosa come System.ChangeType(). Questo funziona se il tipo di implementare IConvertible, e se è convertibile al tipo desiderato (naturalmente questo non è un calco)

14

Dai un'occhiata alla:

var foo = Convert.ChangeType(o, typeof(string)) 
Problemi correlati