0

私は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" });

現在、リストから、または他の手段を使用してこれらすべての関数を呼び出して、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" });");

そして、次のように繰り返すことができました:

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

これは良く聞こえないかもしれませんが、私はこの方法でこれを行う必要があります。

4

1 に答える 1

5

すべてのメソッドが同じ署名を持っているため、デリゲートのリストを使用できます。

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();
}
于 2013-09-04T13:26:29.023 に答える