运行方法的名称作为字符串传递
本文关键字:字符串 方法 运行 | 更新日期: 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()
,也想知道当前正在处理哪种方法(Test1
、Test2
或Test3
)。对此有什么想法吗?
你试着这样做。如该线程中所述,这样做非常困难。
为什么不创建一个由每个测试方法触发的事件?然后,可以使用反射注册到这些事件。
您可以使用委托列表: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(); }