web-dev-qa-db-ja.com

動的と宣言されたオブジェクトのTypeを取得する

次のような動的オブジェクトのTypeを取得したいと思います。

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

上記を除いて、GetType()は、ラップされたオブジェクトのタイプではなく、動的オブジェクトのラッパーのタイプを返します。ありがとう!

28
Radu M.

これを行う必要があります...

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

ちなみに、現在のアセンブリの型でActivator.CreateInstanceを呼び出すと、これは少し混乱します...

Activator.CreateInstance(typeof(Foo))

...オブジェクトはラップされず、元のコードは正常に動作します。

32
Eric Farr

Activator.CreateInstanceを使用できる場合は、直接使用できます。

object tmp = Activator.CreateInstance(Assembly, nmspace + "." + typeName);
Type unknown = tmp.GetType();
2
unruledboy