运行方法的名称作为字符串传递

本文关键字:字符串 方法 运行 | 更新日期: 2023-09-27 18:30:17

在我的WPF MVVM项目中,我必须一次性执行大约10个方法,而无需逐个传递单个名称。假设我可以为单个方法调用执行此操作:

CallStaticMethod("MainApplication.Test", "Test1");

它的身体:

public static void CallStaticMethod(string typeName, string methodName)
{
    var type = Type.GetType(typeName);
    if (type != null)
    {
        var method = type.GetMethod(methodName);
        if (method != null)
        {
            method.Invoke(null, null);
        }
    }
}
public static class Test
{
    public static void Test1()
    {
        Console.WriteLine("Test invoked");
    }
}

但我有要求:

public static class Test
{
    public static void Test1()
    {
        Console.WriteLine("Test invoked");
    }
    public static void Test2()
    {
        Console.WriteLine("Test invoked");
    }
    public static void Test3()
    {
        Console.WriteLine("Test invoked");
    }
    public static void CallAllTestMethod()
   {
       Test1();
       Test2();
       Test3();
   }
}

现在我想称之为CallAllTestMethod(),也想知道当前正在处理哪种方法(Test1Test2Test3)。对此有什么想法吗?

运行方法的名称作为字符串传递

你试着这样做。如该线程中所述,这样做非常困难。

为什么不创建一个由每个测试方法触发的事件?然后,可以使用反射注册到这些事件。

您可以使用委托列表:var actions = new List>(); actions。添加(这个。获取报告);行动。添加(这个。获取用户);行动。添加(这个。获取员工);调用它们很容易: foreach (变量 action in actions) { action(new[] { "All" }); } var actions = new List();行动。添加(() =>这个。GetReports(new[] { "Foo" }));行动。添加(() =>这个。GetUsers(new[] { "Bar" }));etc foreach (var action in actions) { action(); }