如何在c#中动态调用方法

时间:2015-06-10 19:50:54

标签: c# dynamic methods reflection methodinfo

我有一个班级,在这个课程中我有很多方法,我想用所有方法调用所有方法

这是我的代码,它可以工作:

System.Reflection.MethodInfo[] methods = typeof(content).GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
        foreach (System.Reflection.MethodInfo m in methods)
        {
            Response.Write(typeof(content).GetMethod(m.Name).Invoke(null,null).ToString());
}

但我有一个问题,即代码只返回第一个方法名称

我应该怎样做才能得到所有这些?什么错了?

2 个答案:

答案 0 :(得分:2)

您需要在实例上调用每个方法。在下面的示例中,针对.Invoke()的实例调用Content。也就是说,你也在进行多余的GetMethod()通话。您可以直接使用MethodInfo

void Main()
{
    var content = new Content();

    System.Reflection.MethodInfo[] methods = typeof(Content).GetMethods(
        System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);

    foreach (System.Reflection.MethodInfo m in methods)
    {
        Response.Write(m.Invoke(content, null).ToString());
    }
}

public class Content
{
    public static void Test1() {}
    public static void Test2() {}
}

答案 1 :(得分:1)

您要执行的所有方法都是publicstatic吗?好。现在检查您是否将正确的参数传递给要调用的每个方法。

Invoke(null, null)仅适用于不接受任何参数的方法。如果您尝试使用.Invoke(null, null)调用需要参数的方法,则会抛出异常。

例如,如果您有两种方法

public static void Example1() { ... }
public static void Example2(string example) { ... }

此代码将运行Example1(),将其打印出来,然后在尝试将0个参数传递给Example2()时崩溃。要调用Example2(),您需要.Invoke(null, new object[1])