Type.GetType

Type.GetType で Type を取得するときに渡すタイプ名は完全限定型名を渡さなきゃダメみたいです。正確には型名、アセンブリ名、バージョン、パブリックキートークンが必要です。

手抜きして型名だけだと null が返ってきました。

//null
Type type = Type.GetType("System.Windows.Controls.UserControl");
//typeof(System.Window.Contorls.UserControl)
Type type = Type.GetType("System.Windows.Controls.UserControl, System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e");

しかも、アセンブリ名を書かなかったり、バージョンを指定しなかったりしたら、throwOnError を指定していないのに例外が発生します。

どうなんやろ、これは・・・。


ちなみに取得したい Type のアセンブリが判明していて、Assembly.GetType で指定する文字列は型名だけでいけました。

//typeof(System.Window.Contorls.UserControl)
Type type = Type.GetType("System.Windows.Controls.UserControl, System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e").Assembly.GetType("System.Windows.Controls.UserControl");

リフレクションまわりがもう一歩な感じがします。