我是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");
}
}
我的问题分为两部分:
Action
。Action
是Func
并返回void
,但看起来输入args
是必须的,在我的情况下,我没有{ {1}} input args
也是output
我需要什么,或者可能是其他什么? 答案 0 :(得分:2)
如果您的所有方法都没有返回值,那么Action<string[]>
就可以了。如果他们甚至不需要参数,您可以简单地使用非通用Action
- 委托,并省略string[]
- 参数。
var functions = new Dictionary<string, Action>();
functions.Add("Foo", CountParameters);
...
关于调用:如果省略(不必要的)string[]
- 参数,在代码片段中完成它的方式就没问题了。只需调用从字典中获取的Action
- 委托,就像您已经没有任何参数一样:action();
您可以选择拨打()
。
action.Invoke();