2013-10-18 267 views
1

我得到一個錯誤Parameter count mismatch.嘗試調用的方法在另一類上線val = (bool)method.Invoke(instance, args);Invoke方法與參數給出錯誤

的方法只有一個參數,(我認爲)我傳遞一個參數時作爲一個對象,所以不知道爲什麼我得到錯誤。

請有人建議我的代碼有什麼問題嗎?

class firstClass 
{ 
    public bool MethodXYZ(System.Windows.Forms.WebBrowser Wb, 
        string debug_selectedOption) 
    { 
     object[] args = new object[] { Wb, debug_selectedOption }; 
     string methodToInvoke = System.Reflection.MethodBase.GetCurrentMethod().Name; 
     return runGenericMethod(methodToInvoke, args); 

    } 
     private bool runGenericMethod(string methodToInvoke, object[] args) 
     { 
      bool val = false; 
      string anotherClass = args[1].ToString(); 
      Type t = Type.GetType("ProjectXYZ." + anotherClass); 
      MethodInfo method = t.GetMethod(methodToInvoke); 
      var constructorInfo = t.GetConstructor(new Type[0]); 
      if (constructorInfo != null) 
      { 
       object instance = Activator.CreateInstance(t); 
       val = (bool)method.Invoke(instance, args); 
      } 
     //........ 
      return val; 
     } 
} 


class anotherClass 
{ 
     public bool MethodXYZ(object[] args) 
     { 
      return true; 
     } 
} 
+0

爲什麼要將類名存儲在參數數組的第二個位置?另外,當你在測試中調用它時,你實際上傳遞給了這個函數的是什麼? – Servy

+0

我傳遞一個web瀏覽器對象和要調用的方法。 – user3357963

+0

這不是我的問題的答案。什麼是您傳遞的字符串的實際值,以及對象數組的內容是什麼。 – Servy

回答

4

Invoke需要一個對象數組來支持可變數目的參數。在你的情況下,你只有一個參數,它本身在一個對象數組中。所以,你需要創建一個新的對象數組,它的唯一成員是原來的對象數組:

 val = (bool)method.Invoke(instance, new object[] {args}); 
+0

這個工程!謝謝。 – user3357963

2

試試這個

val = (bool)method.Invoke(instance, new object[] { args }); 

第二個參數的Invoke方法需要object[]這是用來傳遞參數前的數:args [0]作爲第一個參數,args [1]作爲第二個參數,依此類推。

所以,當你傳遞對象[]運行時間假設你passsing多個參數,要清楚運行時,你需要另一個對象[]所以它作爲第一個參數傳遞它只有一個元素內包裝