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

C# 如何在c中动态调用方法#,c#,dynamic,methods,reflection,methodinfo,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 met

我有一个类,在这个类中我有很多方法,我想调用所有的方法,但不写名字

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

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());
}
但我有一个问题,代码只返回第一个方法名


我该怎么做才能把它们都弄到手?怎么了?

您需要在实例上调用每个方法。在下面的示例中,针对
内容的实例调用
.Invoke()
。也就是说,您还进行了一个冗余的
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() {}
}

您需要在实例上调用每个方法。在下面的示例中,针对
内容的实例调用
.Invoke()
。也就是说,您还进行了一个冗余的
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() {}
}

您需要在实例上调用每个方法。在下面的示例中,针对
内容的实例调用
.Invoke()
。也就是说,您还进行了一个冗余的
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() {}
}

您需要在实例上调用每个方法。在下面的示例中,针对
内容的实例调用
.Invoke()
。也就是说,您还进行了一个冗余的
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() {}
}

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

Invoke(null,null)
仅适用于不接受任何参数的方法。如果尝试使用
.Invoke(null,null)
调用需要参数的方法,将引发异常

例如,如果您有两种方法

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

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

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

Invoke(null,null)
仅适用于不接受任何参数的方法。如果尝试使用
.Invoke(null,null)
调用需要参数的方法,将引发异常

例如,如果您有两种方法

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

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

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

Invoke(null,null)
仅适用于不接受任何参数的方法。如果尝试使用
.Invoke(null,null)
调用需要参数的方法,将引发异常

例如,如果您有两种方法

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

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

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

Invoke(null,null)
仅适用于不接受任何参数的方法。如果尝试使用
.Invoke(null,null)
调用需要参数的方法,将引发异常

例如,如果您有两种方法

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

此代码将运行
Example1()
,打印出来,然后在尝试将0个参数传递到
Example2()
以调用
Example2()
时崩溃,您需要
.invoke(null,新对象[1])

是否确定有多个公共静态方法?请尝试Response.Write(m.invoke(null,null).ToString());您的调用不包括您正在调用该方法的对象。例如,如果您查看此处的解决方案(),它会对属于该类型实例的对象调用invoke:
method.invoke(instance,null)
@Alioza是的,我确定,我写了
响应返回所有方法name@Oleg:我做了一些你说的事情,但又得到了一些响应。你确定有多个公共静态方法吗?请尝试response.Write(m.Invoke(null,null.ToString());您的调用不包括您正在调用该方法的对象。例如,如果您查看此处的解决方案(),它会对属于该类型实例的对象调用invoke:
method.invoke(instance,null)
@Alioza是的,我确定,我写了
响应返回所有方法name@Oleg:我做了一些你说的事情,但又得到了一些响应。你确定有多个公共静态方法吗?请尝试response.Write(m.Invoke(null,null.ToString());您的调用不包括您正在调用该方法的对象。例如,如果您查看此处的解决方案(),它会对属于该类型实例的对象调用invoke:
method.invoke(instance,null)
@Alioza是的,我确定,我写了
响应返回所有方法name@Oleg:我做了一些你说的事情,但又得到了一些响应。你确定有多个公共静态方法吗?请尝试response.Write(m.Invoke(null,null.ToString());您的调用不包括您正在调用该方法的对象。例如,如果您查看此处的解决方案(),它会对属于该类型实例的对象调用invoke:
method.invoke(instance,null)@Alioza是的我肯定,我写了