2

特定のクラスのすべての void を Dictionary に挿入してから、コマンド ローダーを作成します。ディクショナリのタイプstring, commandは で、文字列は要求されたコマンドを表します。たとえば、 ifstring = "stackoverflow"の場合は を実行しvoid stackOverflow(parameter1, parameter2)ます。これはどのように可能ですか?

私は使用してみました:

public Dictionary<string, Action> Commands = new Dictionary<string, Action>();

しかし、それが問題にアプローチする正しい方法だとは思いません。助けてください。

4

2 に答える 2

1

私があなたを正しく理解していれば、次のようなものが必要です。

class Test
{
  private static void Stack(int n)
  {
    Console.WriteLine("stack " + n);
  }

  private static void Main(string[] arg)
  {
    Dictionary<string, Action<int>> dic = new Dictionary<string, Action<int>>();

    dic.Add("stack", (n) => Stack(n));

    dic["stack"](10);
  }
}
于 2013-08-22T11:21:37.490 に答える
1

できるよ

public Dictionary<string, Delegate> Commands = new Dictionary<string, Delegate>();

次に、DynamicInvoke()メソッドを使用して呼び出します。

お気に入り:

Delegate del = Commands["Help"];
del.DynamicInvoke(param1, param2);

パラメータを渡す必要がある場合は、通常、どのパラメータを持っているかを知っておく必要があります...

string cmd = "DoSomething";
Delegate del = Commands["DoSomething"];

if (cmd == "DoSomething")
{
    Action<int, int> doSomething = (Action<int, int>)del;
    doSomething(1, 2);
}
于 2013-08-22T11:22:02.453 に答える