2011-12-09 25 views
9

¿Es posible convertir un objeto al tipo deseado utilizando System.Type? como referencia?Fundición utilizando System.Type - C#

Tuve una búsqueda y el consenso general fue que no, aunque esperaba que se pudieran presentar algunas ayudas en C# 4.0 que podrían ayudarme.

I.e. el siguiente no funcionará, pero el pseudocódigo es lo que me gustaría.

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

Editar: Necesito utilizar para reconstruir XmlSerializer/deserializar el tipo almacenado en t

+0

Lo que se puede esperar del tipo en tiempo de compilación de 'foo' ser? ¿Qué estás realmente tratando de lograr? Explicar el panorama general ayudaría mucho. –

+0

Si intenta escribir un uso de muestra, verá que su pregunta no tiene sentido. – SLaks

+0

Incluso para el XmlSerializer, no veo por qué necesitarías este elenco. ¿Puedes agregar un código que muestre lo que intentas hacer, incluso si este código no funciona? –

Respuesta

3

Eso no tiene sentido.

Fundición no cambio un objeto en absoluto; simplemente le permite usar el objeto como el tipo dado en tiempo de compilación.
Si no sabe de qué tipo lo está lanzando a en tiempo de compilación, el molde es inútil, ya que no le permite hacer nada con la expresión fundida.

+0

En realidad, puede cambiar un objeto, si implementa un operador 'explícito'. –

+0

@KooKiz: No en tiempo de ejecución. Eso solo ocurrirá si el compilador sabe llamar al operador. – SLaks

1

No hay necesidad de lanzar. El objeto no cambia, tu tipo de referencias (variables) cambia al "lanzar".

0

Supongo que está buscando algo como System.ChangeType(). Esto funciona si el tipo de implementar IConvertible, y si se puede convertir en el tipo deseado (por supuesto, esto no es un elenco)

14

Tenga una mirada en:

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