在WPF C#中从For循环调用用户定义的函数

use*_*971 0 c# wpf mvvm

我正在研究一个WPF MVVM项目,并且要求在列表中添加一些函数调用并在循环中调用它们.

假设有这样的函数声明:

    public void GetReports(string[] arguments)
    {
        // My Code
    }

    public void GetUsers(string[] arguments)
    {
        // My Code
    }

    public void GetEmployess(string[] arguments)
    {
        // My Code
    }
Run Code Online (Sandbox Code Playgroud)

并调用我目前使用的这些功能:

        GetReports(new string[] { "All" });

        GetUsers(new string[] { "All" });

        GetEmployess(new string[] { "All" });
Run Code Online (Sandbox Code Playgroud)

现在我需要从List中调用所有这些函数,或者使用其他方法,以便我可以得到no的计数.动态处理一些时间计算的所有函数.

我不能用这个:

        List<string> ListFns = new List<string>();
        ListFns.Add("GetReports(new string[] { "All" });");
        ListFns.Add("GetReports(new string[] { "All" });");
        ListFns.Add("GetReports(new string[] { "All" });");
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样迭代:

        for (int i = 0; i <= ListFns.Count() - 1; i++)
        {
        ListDataSets[i].ToString();
    }
Run Code Online (Sandbox Code Playgroud)

这可能听起来不错,但我必须这样做.

Jon*_*Jon 5

由于所有方法都具有相同的签名,因此您可以使用委托列表:

var actions = new List<Action<string[]>>();
actions.Add(this.GetReports);
actions.Add(this.GetUsers);
actions.Add(this.GetEmployees);
Run Code Online (Sandbox Code Playgroud)

调用它们很容易:

foreach (var action in actions)
{
    action(new[] { "All" });
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在安排方法调用时确定参数(与实际执行方法调用时相比),则可以使用许多选项.例如,将参数打包为匿名函数:

var actions = new List<Action>();
actions.Add(() => this.GetReports(new[] { "Foo" }));
actions.Add(() => this.GetUsers(new[] { "Bar" }));
// etc

foreach (var action in actions)
{
    action();
}
Run Code Online (Sandbox Code Playgroud)