2016-08-23 75 views
1

我有一個超過200個函數的類。我需要一個函數來運行類中的所有方法。運行C類中的所有方法#

所有功能都返回void,並且不帶任何參數。

這是我目前有:

public void runAllFunctions() 
{ 
     var methods = typeof(win10).GetMethods(BindingFlags.Public | BindingFlags.Instance); 
     object[] parameters = null; 
     foreach (var method in methods) 
     { 
      if (method.Name.StartsWith("WN10")) 
      { 
       method.Invoke(null, parameters); 
      } 
     } 
    } 

有了這個代碼,我得到的錯誤「非靜態方法需要一個目標」

我如何可以運行所有的方法呢?

+8

您需要將對象實例作爲第一個參數傳遞給'Invoke'。 –

回答

6

您必須提供win10實例;如果runAllFunctionswin10的方法:

public void runAllFunctions() { 
    var methods = GetType() 
     .GetMethods(BindingFlags.Public | BindingFlags.Instance) 
     .Where(item => item.Name.StartsWith("WN10")); 

    foreach (var method in methods) 
     method.Invoke(this, new Object[0]); // please, notice "this" 
    } 

萬一runAllFunctionswin10的方法:

public void runAllFunctions() { 
    win10 instance = new win10(); //TODO: put right constructor here 

    var methods = instance 
     .GetType() 
     .GetMethods(BindingFlags.Public | BindingFlags.Instance) 
     .Where(item => item.Name.StartsWith("WN10")); 

    foreach (var method in methods) 
     method.Invoke(instance, new Object[0]); 
    } 
5

首先創建類型的實例

win10 instance = new win10(); 

然後用它在你的循環中

method.Invoke(instance , parameters); 
相關問題