繁体   English   中英

通过引用调用动作

[英]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. 我知道Action是带有void返回值的Func ,但看起来输入args是必须的,就我而言,我既没有input args也没有output所以Action我需要什么,或者可能是其他东西?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM