2016-11-26 162 views
0

當我嘗試運行以下代碼時,mi.Invoke行中出現錯誤,表示「TargetException:Object與目標類型不匹配」。C#/ Unity反射:TargetException:對象與目標類型不匹配

我見過其他答案,所以他們都說這是Invoke的第一個參數是「this」而不是類型本身的問題,在這裏不是這種情況。

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

只是供參考:真的沒有理由在Unity中做這件事。你只是寫一個遊戲引擎的組件。老實說,它永遠不會工作! – Fattie

+0

可以想象,你是在這之後:http://stackoverflow.com/a/36249404/294884希望它可以幫助 – Fattie

+0

但你爲什麼要用反射調用Update函數?另外,你的'getTypeByName'函數在哪裏? – Programmer

回答

0

它不工作的原因是因爲我試圖調用一個非靜態方法使用類,而不是一個實例。下面的代碼固定它:

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

花了這麼長時間來修復這是C#給了一個完全不相關的理由拒絕執行。

相關問題