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

时间:2013-09-05 08:33:41

标签: c# wpf mvvm

在我的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)。有没有想过这个?

2 个答案:

答案 0 :(得分:0)

你试图做this。如该线程中所述,这很难做到。

为什么不创建一个被每个测试方法触发的事件?然后,您可以register to those events using reflection

答案 1 :(得分:0)

您可以使用委托列表:var actions = new List>(); actions.Add(this.GetReports); actions.Add(this.GetUsers); actions.Add(this.GetEmployees);调用它们很容易:foreach(动作中的var动作){action(new [] {“All”}); } var actions = new List(); actions.Add(()=> this.GetReports(new [] {“Foo”})); actions.Add(()=> this.GetUsers(new [] {“Bar”})); //等foreach(动作中的var动作){action(); }