通过引用调用操作

Invoke Action by reference

我是 C# 新手,看来我需要使用 Dictionary<string, Action> 所以我写了下面的代码:

using System;
using System.Collections.Generic;

public class Program
{   
    public static void Main()
    {       
        var functions = new Dictionary<string, Action<string[]>>();
        functions.Add("Foo", CountParameters);
        functions.Add("Bar", SomeOtherMethodName);

        Console.WriteLine("Hello World");

        Action<string[]> action;
        if (functions.TryGetValue("Foo", out action))
        {
            action();
            // What shall I write here to invoke the action!?
        }
        else
        {
            // No function with that name
        }               
    }

    public static void CountParameters(string[] args)
    {
        Console.WriteLine("Fn 1");
    }

    public static void SomeOtherMethodName(string[] args)
    {
        Console.WriteLine("Fn 2");
    }
}

我的问题分为两部分:

  1. 如果条件为真,我该如何调用 Action
  2. 我知道 ActionFuncvoid return,但看起来输入 args 是必须的,就我而言,我没有 input args 也没有 output 所以 Action 是我需要的,还是其他东西?

如果您的所有方法都没有 return 值,那么 Action<string[]> 就可以了。如果他们甚至不需要参数,您可以简单地使用非通用 Action-delegate 并省略 string[]-parameter.

var functions = new Dictionary<string, Action>();
functions.Add("Foo", CountParameters);
...

关于调用:如果您省略了(不必要的)string[] 参数,您在代码片段中完成调用的方式就很好。只需调用从字典中获取的 Action-delegate,就像您已经在没有任何参数的情况下所做的那样:action();

除了附加方括号 (),您还可以调用 action.Invoke();.