2011-09-09 10 views
22

chciałbym uzyskać typ dla dynamicznego obiektu, coś jak:uzyskać typ dla obiektu ogłosił dynamiczny

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

tą różnicą, że w powyższym GetType() zwraca typ owijki do dynamicznego obiekty nie są typem zawiniętego obiektu. Dzięki!

+0

Wydaje się, że potrzebujemy więcej szczegółów. Nie widzę niczego złego w tym, co masz. –

+1

Jeśli wydrukuję nazwę nieznanego typu, otrzymam: "ObjectHandle", a nie typ ukrytego obiektu dynamicznego. – user379429

Odpowiedz

23

Trzeba to zrobić ...

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

Nawiasem mówiąc, jest to trochę mylące, ponieważ jeśli zadzwonisz Activator.CreateInstance od typu w aktualnym zespole ...

Activator.CreateInstance(typeof(Foo)) 

... obiekt nie jest opakowany, a oryginalny kod działa poprawnie.

+0

btw, robi to, aby niepotrzebnie załadować zespół do bieżącej aplikacji. Po rozpakowaniu zostanie on załadowany. – x0n

4

Jeśli można użyć Activator.CreateInstance można bezpośrednio użyć:

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

Czy obiekty nie są nieco inne niż dynamika? – amalgamate

-2

To jest bardzo proste, jeśli myślisz, że po wyjęciu z pudełka. :-)

Type theType = dynamicItem.GetType(); 

tu przejść ...

+0

podczas korzystania z COM Interop z Excelem przez ExcelDNA, typ obiektu Range jest __ComObject, nieprzydatny. W takim przypadku zobacz ten artykuł: https://fernandof.wordpress.com/2008/02/05/how-to-check-the-type-of-a--object-system__comobject-with-visual-c- net/getexceltypeforcomobject-method / –