从WPF C#中的For循环调用用户定义的函数
本文关键字:用户 定义 函数 调用 循环 WPF 中的 For | 更新日期: 2023-09-27 18:30:13
我正在处理一个WPF MVVM项目,有一个小要求,就是在列表中添加一些函数调用,并在循环中调用它们。
假设有这样的函数声明:
public void GetReports(string[] arguments)
{
// My Code
}
public void GetUsers(string[] arguments)
{
// My Code
}
public void GetEmployess(string[] arguments)
{
// My Code
}
并调用我目前正在使用的这些函数:
GetReports(new string[] { "All" });
GetUsers(new string[] { "All" });
GetEmployess(new string[] { "All" });
现在我需要从列表中调用所有这些函数,或者使用其他方法,这样我就可以获得所有函数的数量,以便动态处理一些时间计算。
我不能用这个:
List<string> ListFns = new List<string>();
ListFns.Add("GetReports(new string[] { "All" });");
ListFns.Add("GetReports(new string[] { "All" });");
ListFns.Add("GetReports(new string[] { "All" });");
然后我可以这样迭代:
for (int i = 0; i <= ListFns.Count() - 1; i++)
{
ListDataSets[i].ToString();
}
这听起来可能不太好,但我必须这样做。
由于所有方法都有相同的签名,因此可以使用委托列表:
var actions = new List<Action<string[]>>();
actions.Add(this.GetReports);
actions.Add(this.GetUsers);
actions.Add(this.GetEmployees);
打电话给他们很容易:
foreach (var action in actions)
{
action(new[] { "All" });
}
如果您希望在计划方法调用时(与实际执行时相比)确定参数,则可以使用许多选项。例如,将参数打包为匿名函数:
var actions = new List<Action>();
actions.Add(() => this.GetReports(new[] { "Foo" }));
actions.Add(() => this.GetUsers(new[] { "Bar" }));
// etc
foreach (var action in actions)
{
action();
}