2016-11-26 19 views
0

次のコードを実行しようとすると、mi.Invoke行に "TargetException:Objectがターゲットタイプと一致しません"というエラーが発生します。C#/ Unity Reflection:TargetException:オブジェクトがターゲットタイプと一致しません

私はSOに関する他の答えを見てきましたが、ここではそうではないタイプ自体ではなく、 "これ"であるInvokeの最初の引数に問題があるといっています。

MethodInfo作成行と呼び出し行は、どちらも同じ変数 "type2"を使用しますが、それらは異なっています。このエラーを修正するにはどうすればよいですか?

//In this example VoxelType is "ConveyorBelt". This is a class with a public Update method, in the same namespace. 
    Type type2 = getTypeByName (VoxelType)[0]; //Get voxel type 
    print (type2.Namespace); //Returns null 
    print (VoxelType); //Returns ConveyorBelt 
    print (type2);//Returns ConveyorBelt 
    MethodInfo mi = type2.GetMethod ("Update"); 
    mi.Invoke (type2, null); //Crashes everytime with TargetException 
+0

ちょうどFYI:Unityでこれを行う理由はまったくありません。あなたはゲームエンジンのコンポーネントを書くだけです。正直なところ、それは決してうまくいかないでしょう! – Fattie

+0

あなたはこれを後にしていると思われます:http://stackoverflow.com/a/36249404/294884助けてくれるといいです – Fattie

+0

なぜリフレクションでUpdate関数を呼び出そうとしていますか?また、あなたの 'getTypeByName'関数はどこですか? – Programmer

答えて

0

理由は、インスタンスではなくクラスを使用して非静的メソッドを呼び出そうとしていたためです。それを修正以下のコード:C#は実行することを拒否のための完全に無関係な口実を与えたとして

Type type2 = getTypeByName(NameOfClass)[0]; //Get voxel type 
    MethodInfo mi = type2.GetMethod(NameOfNonStaticMethod); 
    object instance = Activator.CreateInstance(type2); 
    mi.Invoke(instance, new object[] { Parameters }); 

それはこの問題を解決するためにそう時間がかかりました。

関連する問題