通过引用调用Action

时间:2016-11-06 07:04:44

标签: c# .net-core

我是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. 我理解ActionFunc并返回void,但看起来输入args是必须的,在我的情况下,我没有{ {1}} input args也是output我需要什么,或者可能是其他什么?

1 个答案:

答案 0 :(得分:2)

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

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

关于调用:如果省略(不必要的)string[] - 参数,在代码片段中完成它的方式就没问题了。只需调用从字典中获取的Action - 委托,就像您已经没有任何参数一样:action();

您可以选择拨打()

,而不是附加方括号action.Invoke();