我有一个有200多个功能的课程。我需要一个函数来运行类中的所有方法。
所有函数都返回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);
}
}
}
使用此代码,我收到错误“非静态方法需要目标”
如何运行所有方法?
答案 0 :(得分:7)
您必须提供win10
class 实例;如果runAllFunctions
是win10
的方法:
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"
}
如果runAllFunctions
不是 win10
的方法:
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]);
}
答案 1 :(得分:5)
首先创建一个
类型的实例win10 instance = new win10();
然后在你的循环中使用它
method.Invoke(instance , parameters);