2016-08-23 76 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); 
相关问题