2

タイプが不明な場合、CreateInstanceからの戻り値をどのようにキャストしますか?

たとえば、このコードでは次のようになります。

MethodInfo mInfo = typeof(MyType).GetMethod(MethodBase.GetCurrentMethod().Name);
Object o = Activator.CreateInstance(mInfo.ReturnType);

mInfo.ReturnTypeに含まれるものにoをキャストするにはどうすればよいですか?

4

2 に答える 2

2

キャスト(少なくとも、通常の意味で)は、コンパイル時/静的型指定の操作です。実行時に未知のタイプでさえ意味をなす唯一の方法は、ジェネリック(いくつかにキャストし、実行時にまたはを介してT選択できることに注意してください)またはメタプログラミング(適切な実行を行うためにILを発行する)のいずれかを処理する場合です。キャスト)。他のすべての場合、実行時までタイプが不明であると、またはのいずれかでスタックします。TMakeGenericMethodMakeGenericTypeobjectdynamic

于 2011-05-09T08:19:28.270 に答える
0

mInfo.ReturnTypeコンパイル時に現在のコンテキストで表示されるタイプの定義が状況に含まれている場合を除いて、通常は習慣的にそれを行うことはできません。たとえば、定義がある場合mInfo.ReturnTypeは、次のようにboolすることができます。

bool t = (bool)o;

ただし、この場合、Activatorを使用する意味はありません。Activatorクラスは、別のアセンブリからロードされた型を使用しようとするときに使用されます。つまり、型はコンパイル時に表示されません。
したがって、これを行う方法はありません。

于 2011-05-09T08:23:15.183 に答える