2011-09-09 21 views
22

me gustaría obtener el tipo de un objeto dinámico, algo así como:obtener el tipo de un objeto declarado dinámica

dynamic tmp = Activator.CreateInstance(assembly, nmspace + "." + typeName); 
Type unknown = tmp.GetType(); 

Salvo que en el anterior, GetType() devuelve el tipo de contenedor para dinámico objetos no el tipo del objeto envuelto. ¡Gracias!

+0

Parece que necesitamos más detalle. No veo nada malo con lo que tienes. –

+1

Si imprimo el nombre del tipo desconocido obtengo: "ObjectHandle" no es el tipo del objeto dinámico subyacente. – user379429

Respuesta

23

Es necesario hacer esto ...

Type unknown = ((ObjectHandle)tmp).Unwrap().GetType(); 

Por cierto, esto es un poco confuso porque si se llama Activator.CreateInstance en un tipo en su actual asamblea ...

Activator.CreateInstance(typeof(Foo)) 

... el objeto no está ajustado y el código original funciona bien.

+0

Por cierto, hace esto para evitar que el ensamblaje se cargue innecesariamente en el dominio de aplicación actual. Cuando desenvuelva, se cargará. – x0n

4

Si puede utilizar Activator.CreateInstance, se puede utilizar directamente:

object tmp = Activator.CreateInstance(assembly, nmspace + "." + typeName); 
Type unknown = tmp.GetType(); 
+1

¿No son los objetos algo diferentes de la dinámica? – amalgamate

-2

Es muy simple si se piensa fuera de la caja. :-)

Type theType = dynamicItem.GetType(); 

Aquí tienes ...

+0

cuando se usa COM Interop con Excel a través de ExcelDNA, el tipo de un objeto Range es __ComObject, no es útil. En este caso, consulte este artículo: https://fernandof.wordpress.com/2008/02/05/how-to-check-the-type-of-a-com-object-system__comobject-with-visual-c- net/getexceltypeforcomobject-method / –

Cuestiones relacionadas